mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 01:10:09 +00:00
Revert "Fix channel video playback on iOS. < 17.5"
This reverts commit 8b89834d15014d8edb63d3b62ce9f07e507231a4.
This commit is contained in:
parent
41ac4b5130
commit
3c3632c646
@ -91,12 +91,10 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
private let renderSynchronizer: AVSampleBufferRenderSynchronizer
|
private let renderSynchronizer: AVSampleBufferRenderSynchronizer
|
||||||
private var videoRenderer: AVSampleBufferDisplayLayer
|
private var videoRenderer: AVSampleBufferDisplayLayer
|
||||||
private var audioRenderer: AVSampleBufferAudioRenderer?
|
private var audioRenderer: AVSampleBufferAudioRenderer?
|
||||||
private weak var videoNode: MediaPlayerNode?
|
|
||||||
|
|
||||||
private var partsState = ChunkMediaPlayerPartsState(duration: nil, parts: [])
|
private var partsState = ChunkMediaPlayerPartsState(duration: nil, parts: [])
|
||||||
private var loadedParts: [LoadedPart] = []
|
private var loadedParts: [LoadedPart] = []
|
||||||
private var loadedPartsMediaData: QueueLocalObject<LoadedPartsMediaData>
|
private var loadedPartsMediaData: QueueLocalObject<LoadedPartsMediaData>
|
||||||
private var reportedDidEnqueueVideo: Bool = false
|
|
||||||
private var hasSound: Bool = false
|
private var hasSound: Bool = false
|
||||||
|
|
||||||
private var statusValue: MediaPlayerStatus? {
|
private var statusValue: MediaPlayerStatus? {
|
||||||
@ -175,7 +173,6 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
assertionFailure()
|
assertionFailure()
|
||||||
}
|
}
|
||||||
self.videoRenderer = playerNode.videoLayer ?? AVSampleBufferDisplayLayer()
|
self.videoRenderer = playerNode.videoLayer ?? AVSampleBufferDisplayLayer()
|
||||||
self.videoNode = playerNode
|
|
||||||
|
|
||||||
self.updateTimer = Foundation.Timer.scheduledTimer(withTimeInterval: 1.0 / 60.0, repeats: true, block: { [weak self] _ in
|
self.updateTimer = Foundation.Timer.scheduledTimer(withTimeInterval: 1.0 / 60.0, repeats: true, block: { [weak self] _ in
|
||||||
guard let self else {
|
guard let self else {
|
||||||
@ -680,8 +677,8 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
|
|
||||||
videoTarget.requestMediaDataWhenReady(on: self.dataQueue.queue, using: { [weak self] in
|
videoTarget.requestMediaDataWhenReady(on: self.dataQueue.queue, using: { [weak self] in
|
||||||
if let loadedPartsMediaData = loadedPartsMediaData.unsafeGet() {
|
if let loadedPartsMediaData = loadedPartsMediaData.unsafeGet() {
|
||||||
let fillResult = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: videoTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: true)
|
let bufferIsReadyForMoreData = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: videoTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: true)
|
||||||
if fillResult.isReadyForMoreData {
|
if bufferIsReadyForMoreData {
|
||||||
videoTarget.stopRequestingMediaData()
|
videoTarget.stopRequestingMediaData()
|
||||||
Queue.mainQueue().async {
|
Queue.mainQueue().async {
|
||||||
guard let self else {
|
guard let self else {
|
||||||
@ -698,12 +695,11 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
if !self.audioIsRequestingMediaData, let audioRenderer = self.audioRenderer {
|
if !self.audioIsRequestingMediaData, let audioRenderer = self.audioRenderer {
|
||||||
self.audioIsRequestingMediaData = true
|
self.audioIsRequestingMediaData = true
|
||||||
let loadedPartsMediaData = self.loadedPartsMediaData
|
let loadedPartsMediaData = self.loadedPartsMediaData
|
||||||
let reportedDidEnqueueVideo = self.reportedDidEnqueueVideo
|
|
||||||
let audioTarget = audioRenderer
|
let audioTarget = audioRenderer
|
||||||
audioTarget.requestMediaDataWhenReady(on: self.dataQueue.queue, using: { [weak self] in
|
audioTarget.requestMediaDataWhenReady(on: self.dataQueue.queue, using: { [weak self] in
|
||||||
if let loadedPartsMediaData = loadedPartsMediaData.unsafeGet() {
|
if let loadedPartsMediaData = loadedPartsMediaData.unsafeGet() {
|
||||||
let fillResult = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: audioTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: false)
|
let bufferIsReadyForMoreData = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: audioTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: false)
|
||||||
if fillResult.isReadyForMoreData {
|
if bufferIsReadyForMoreData {
|
||||||
audioTarget.stopRequestingMediaData()
|
audioTarget.stopRequestingMediaData()
|
||||||
Queue.mainQueue().async {
|
Queue.mainQueue().async {
|
||||||
guard let self else {
|
guard let self else {
|
||||||
@ -713,28 +709,13 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
self.updateInternalState()
|
self.updateInternalState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if fillResult.didEnqueue && !reportedDidEnqueueVideo {
|
|
||||||
Queue.mainQueue().async {
|
|
||||||
guard let self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
self.reportedDidEnqueueVideo = true
|
|
||||||
if #available(iOS 17.4, *) {
|
|
||||||
} else {
|
|
||||||
if let videoNode = self.videoNode {
|
|
||||||
videoNode.notifyHasSentFramesToDisplay()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static func fillRendererBuffer(bufferTarget: AVQueuedSampleBufferRendering, loadedPartsMediaData: LoadedPartsMediaData, isVideo: Bool) -> (isReadyForMoreData: Bool, didEnqueue: Bool) {
|
private static func fillRendererBuffer(bufferTarget: AVQueuedSampleBufferRendering, loadedPartsMediaData: LoadedPartsMediaData, isVideo: Bool) -> Bool {
|
||||||
var bufferIsReadyForMoreData = true
|
var bufferIsReadyForMoreData = true
|
||||||
var didEnqeue = false
|
|
||||||
outer: while true {
|
outer: while true {
|
||||||
if !bufferTarget.isReadyForMoreMediaData {
|
if !bufferTarget.isReadyForMoreMediaData {
|
||||||
bufferIsReadyForMoreData = false
|
bufferIsReadyForMoreData = false
|
||||||
@ -774,7 +755,9 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
continue outer
|
continue outer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
didEnqeue = true
|
/*if isVideo {
|
||||||
|
print("Enqueue \(isVideo ? "video" : "audio") at \(CMSampleBufferGetPresentationTimeStamp(sampleBuffer).seconds) \(CMSampleBufferGetPresentationTimeStamp(sampleBuffer).value)/\(CMSampleBufferGetPresentationTimeStamp(sampleBuffer).timescale) next \(CMSampleBufferGetPresentationTimeStamp(sampleBuffer).value + CMSampleBufferGetDuration(sampleBuffer).value)")
|
||||||
|
}*/
|
||||||
bufferTarget.enqueue(sampleBuffer)
|
bufferTarget.enqueue(sampleBuffer)
|
||||||
hasData = true
|
hasData = true
|
||||||
continue outer
|
continue outer
|
||||||
@ -787,7 +770,7 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (bufferIsReadyForMoreData, didEnqeue)
|
return bufferIsReadyForMoreData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -444,11 +444,4 @@ public final class MediaPlayerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
self.updateVideoInHierarchy?(self.videoInHierarchy || self.canPlaybackWithoutHierarchy)
|
self.updateVideoInHierarchy?(self.videoInHierarchy || self.canPlaybackWithoutHierarchy)
|
||||||
}
|
}
|
||||||
|
|
||||||
func notifyHasSentFramesToDisplay() {
|
|
||||||
if !self.didNotifyVideoLayerReadyForDisplay {
|
|
||||||
self.didNotifyVideoLayerReadyForDisplay = true
|
|
||||||
self.hasSentFramesToDisplay?()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ public struct HLSCodecConfiguration {
|
|||||||
public extension HLSCodecConfiguration {
|
public extension HLSCodecConfiguration {
|
||||||
init(context: AccountContext) {
|
init(context: AccountContext) {
|
||||||
var isSoftwareAv1Supported = false
|
var isSoftwareAv1Supported = false
|
||||||
|
var isHardwareAv1Supported = false
|
||||||
|
|
||||||
var length: Int = 4
|
var length: Int = 4
|
||||||
var cpuCount: UInt32 = 0
|
var cpuCount: UInt32 = 0
|
||||||
@ -43,10 +44,6 @@ public extension HLSCodecConfiguration {
|
|||||||
isSoftwareAv1Supported = value != 0.0
|
isSoftwareAv1Supported = value != 0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
if "".isEmpty {
|
|
||||||
isSoftwareAv1Supported = false
|
|
||||||
}
|
|
||||||
|
|
||||||
self.init(isHardwareAv1Supported: isHardwareAv1Supported, isSoftwareAv1Supported: isSoftwareAv1Supported)
|
self.init(isHardwareAv1Supported: isHardwareAv1Supported, isSoftwareAv1Supported: isSoftwareAv1Supported)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user