Revert "Fix channel video playback on iOS. < 17.5"

This reverts commit 8b89834d15014d8edb63d3b62ce9f07e507231a4.
This commit is contained in:
Isaac 2024-12-23 21:45:10 +08:00
parent 41ac4b5130
commit 3c3632c646
3 changed files with 10 additions and 37 deletions

View File

@ -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
} }
} }

View File

@ -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?()
}
}
} }

View File

@ -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)
} }
} }