diff --git a/submodules/MediaPlayer/Sources/ChunkMediaPlayerV2.swift b/submodules/MediaPlayer/Sources/ChunkMediaPlayerV2.swift index a05b16e737..1eb9b58a6a 100644 --- a/submodules/MediaPlayer/Sources/ChunkMediaPlayerV2.swift +++ b/submodules/MediaPlayer/Sources/ChunkMediaPlayerV2.swift @@ -131,12 +131,10 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { private let renderSynchronizer: AVSampleBufferRenderSynchronizer private var videoRenderer: AVSampleBufferDisplayLayer private var audioRenderer: AVSampleBufferAudioRenderer? - private weak var videoNode: MediaPlayerNode? private var partsState = ChunkMediaPlayerPartsState(duration: nil, parts: []) private var loadedParts: [LoadedPart] = [] private var loadedPartsMediaData: QueueLocalObject - private var reportedDidEnqueueVideo: Bool = false private var hasSound: Bool = false private var statusValue: MediaPlayerStatus? { @@ -216,7 +214,6 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { assertionFailure() } self.videoRenderer = playerNode.videoLayer ?? AVSampleBufferDisplayLayer() - self.videoNode = playerNode switch source { case let .externalParts(partsState): @@ -748,8 +745,8 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { videoTarget.requestMediaDataWhenReady(on: self.dataQueue.queue, using: { [weak self] in if let loadedPartsMediaData = loadedPartsMediaData.unsafeGet() { - let fillResult = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: videoTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: true) - if fillResult.isReadyForMoreData { + let bufferIsReadyForMoreData = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: videoTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: true) + if bufferIsReadyForMoreData { videoTarget.stopRequestingMediaData() Queue.mainQueue().async { guard let self else { @@ -766,12 +763,11 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { if !self.audioIsRequestingMediaData, let audioRenderer = self.audioRenderer { self.audioIsRequestingMediaData = true let loadedPartsMediaData = self.loadedPartsMediaData - let reportedDidEnqueueVideo = self.reportedDidEnqueueVideo let audioTarget = audioRenderer audioTarget.requestMediaDataWhenReady(on: self.dataQueue.queue, using: { [weak self] in if let loadedPartsMediaData = loadedPartsMediaData.unsafeGet() { - let fillResult = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: audioTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: false) - if fillResult.isReadyForMoreData { + let bufferIsReadyForMoreData = ChunkMediaPlayerV2.fillRendererBuffer(bufferTarget: audioTarget, loadedPartsMediaData: loadedPartsMediaData, isVideo: false) + if bufferIsReadyForMoreData { audioTarget.stopRequestingMediaData() Queue.mainQueue().async { guard let self else { @@ -781,28 +777,13 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { 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 didEnqeue = false outer: while true { if !bufferTarget.isReadyForMoreMediaData { bufferIsReadyForMoreData = false @@ -845,7 +826,6 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { /*if !isVideo { print("Enqueue audio \(CMSampleBufferGetPresentationTimeStamp(sampleBuffer).value) next: \(CMSampleBufferGetPresentationTimeStamp(sampleBuffer).value + 1024)") }*/ - didEnqeue = true bufferTarget.enqueue(sampleBuffer) hasData = true continue outer @@ -858,7 +838,7 @@ public final class ChunkMediaPlayerV2: ChunkMediaPlayer { } } - return (bufferIsReadyForMoreData, didEnqeue) + return bufferIsReadyForMoreData } } diff --git a/submodules/MediaPlayer/Sources/MediaPlayerNode.swift b/submodules/MediaPlayer/Sources/MediaPlayerNode.swift index 145d9adfcb..7b1273f115 100644 --- a/submodules/MediaPlayer/Sources/MediaPlayerNode.swift +++ b/submodules/MediaPlayer/Sources/MediaPlayerNode.swift @@ -444,11 +444,4 @@ public final class MediaPlayerNode: ASDisplayNode { } self.updateVideoInHierarchy?(self.videoInHierarchy || self.canPlaybackWithoutHierarchy) } - - func notifyHasSentFramesToDisplay() { - if !self.didNotifyVideoLayerReadyForDisplay { - self.didNotifyVideoLayerReadyForDisplay = true - self.hasSentFramesToDisplay?() - } - } } diff --git a/submodules/TelegramUniversalVideoContent/Sources/HLSVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/HLSVideoContent.swift index 319ea2b8b0..2feecdd919 100644 --- a/submodules/TelegramUniversalVideoContent/Sources/HLSVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/HLSVideoContent.swift @@ -27,8 +27,15 @@ public struct HLSCodecConfiguration { public extension HLSCodecConfiguration { init(context: AccountContext) { - var isHardwareAv1Supported = internal_isHardwareAv1Supported - var isSoftwareAv1Supported = false + /*var isSoftwareAv1Supported = false + var isHardwareAv1Supported = false + + var length: Int = 4 + var cpuCount: UInt32 = 0 + sysctlbyname("hw.ncpu", &cpuCount, &length, nil, 0) + if cpuCount >= 6 { + isSoftwareAv1Supported = true + } if let data = context.currentAppConfiguration.with({ $0 }).data, let value = data["ios_enable_hardware_av1"] as? Double { isHardwareAv1Supported = value != 0.0 @@ -37,7 +44,9 @@ public extension HLSCodecConfiguration { isSoftwareAv1Supported = value != 0.0 } - self.init(isHardwareAv1Supported: isHardwareAv1Supported, isSoftwareAv1Supported: isSoftwareAv1Supported) + self.init(isHardwareAv1Supported: isHardwareAv1Supported, isSoftwareAv1Supported: isSoftwareAv1Supported)*/ + + self.init(isHardwareAv1Supported: false, isSoftwareAv1Supported: false) } } diff --git a/submodules/TelegramUniversalVideoContent/Sources/HLSVideoJSNativeContentNode.swift b/submodules/TelegramUniversalVideoContent/Sources/HLSVideoJSNativeContentNode.swift index 7a851fd166..04f7b518e0 100644 --- a/submodules/TelegramUniversalVideoContent/Sources/HLSVideoJSNativeContentNode.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/HLSVideoJSNativeContentNode.swift @@ -1091,7 +1091,8 @@ final class HLSVideoJSNativeContentNode: ASDisplayNode, UniversalVideoContentNod self.contextDisposable = SharedHLSVideoJSContext.shared.register(context: self) self.playerNode.frame = CGRect(origin: CGPoint(), size: self.intrinsicDimensions) - var didProcessFramesToDisplay = false + + /*var didProcessFramesToDisplay = false self.playerNode.isHidden = true self.playerNode.hasSentFramesToDisplay = { [weak self] in guard let self, !didProcessFramesToDisplay else { @@ -1099,7 +1100,7 @@ final class HLSVideoJSNativeContentNode: ASDisplayNode, UniversalVideoContentNod } didProcessFramesToDisplay = true self.playerNode.isHidden = false - } + }*/ //let thumbnailVideoReference = HLSVideoContent.minimizedHLSQuality(file: fileReference)?.file ?? fileReference diff --git a/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift index ec361c1208..249633cdce 100644 --- a/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift @@ -453,7 +453,7 @@ private final class NativeVideoContentNode: ASDisplayNode, UniversalVideoContent super.init() - var didProcessFramesToDisplay = false + /*var didProcessFramesToDisplay = false self.playerNode.isHidden = true self.playerNode.hasSentFramesToDisplay = { [weak self] in guard let self, !didProcessFramesToDisplay else { @@ -462,7 +462,7 @@ private final class NativeVideoContentNode: ASDisplayNode, UniversalVideoContent didProcessFramesToDisplay = true self.playerNode.isHidden = false self.hasSentFramesToDisplay?() - } + }*/ if let dimensions = hintDimensions { self.dimensions = dimensions