From 55a1a0052fef2e9d8affe41c1f3b521bdcd07ff9 Mon Sep 17 00:00:00 2001 From: kingslay Date: Thu, 15 Feb 2024 22:25:14 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E9=99=8D=E4=BD=8E=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E5=BB=B6=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift b/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift index 8f2ad4c66..888de9a21 100644 --- a/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift @@ -85,7 +85,7 @@ public class AudioRendererPlayer: AudioOutput { } self.request() } - periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.02), queue: .main) { [weak self] time in + periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.01), queue: .main) { [weak self] time in guard let self else { return } From 87bbd0fb7ef722ecc375e22a7a8b1c7c58a2bce7 Mon Sep 17 00:00:00 2001 From: kingslay Date: Fri, 16 Feb 2024 02:45:33 +0800 Subject: [PATCH 02/17] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BB=B6=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/KSPlayer/AVPlayer/KSOptions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/KSPlayer/AVPlayer/KSOptions.swift b/Sources/KSPlayer/AVPlayer/KSOptions.swift index 1755494f3..035848cc2 100644 --- a/Sources/KSPlayer/AVPlayer/KSOptions.swift +++ b/Sources/KSPlayer/AVPlayer/KSOptions.swift @@ -362,7 +362,7 @@ open class KSOptions { #endif let diff = nextVideoTime - desire // print("[video] video diff \(diff) nextVideoTime \(nextVideoTime) main \(main.time.seconds)") - if diff >= 1 / Double(fps * 2) { + if diff >= 1 / Double(max(fps * 2, 100)) { videoClockDelayCount = 0 return (diff, .remain) } else { From a20c7391bc973ef0ba7c16edb9b1e31b00d56057 Mon Sep 17 00:00:00 2001 From: Carlos Vidal Date: Fri, 16 Feb 2024 11:09:45 +0100 Subject: [PATCH 03/17] removed http_proxy unset when no kCFNetworkProxiesHTTPProxy is set --- Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift b/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift index 4e312bbcd..c2e6c04ee 100644 --- a/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift +++ b/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift @@ -320,11 +320,9 @@ public extension CMFormatDescription { func setHttpProxy() { guard let proxySettings = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() as? NSDictionary else { - unsetenv("http_proxy") return } guard let proxyHost = proxySettings[kCFNetworkProxiesHTTPProxy] as? String, let proxyPort = proxySettings[kCFNetworkProxiesHTTPPort] as? Int else { - unsetenv("http_proxy") return } let httpProxy = "http://\(proxyHost):\(proxyPort)" From 399de9ea0006f9d7270984631daaad9210b78086 Mon Sep 17 00:00:00 2001 From: Carlos Vidal Date: Fri, 16 Feb 2024 11:57:26 +0100 Subject: [PATCH 04/17] introduced KSOption to use system defined http proxy --- Sources/KSPlayer/AVPlayer/KSOptions.swift | 1 + Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Sources/KSPlayer/AVPlayer/KSOptions.swift b/Sources/KSPlayer/AVPlayer/KSOptions.swift index 035848cc2..3c40b2542 100644 --- a/Sources/KSPlayer/AVPlayer/KSOptions.swift +++ b/Sources/KSPlayer/AVPlayer/KSOptions.swift @@ -479,6 +479,7 @@ public extension KSOptions { static var canStartPictureInPictureAutomaticallyFromInline = true static var preferredFrame = true static var displayCriteriaFormatDescriptionEnabled = false + static var useSystemHTTPProxy = true /// 日志级别 static var logLevel = LogLevel.warning static var logger: LogHandler = OSLog(lable: "KSPlayer") diff --git a/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift b/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift index c2e6c04ee..f7f4d71f1 100644 --- a/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift +++ b/Sources/KSPlayer/AVPlayer/MediaPlayerProtocol.swift @@ -319,10 +319,15 @@ public extension CMFormatDescription { } func setHttpProxy() { + guard KSOptions.useSystemHTTPProxy else { + return + } guard let proxySettings = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() as? NSDictionary else { + unsetenv("http_proxy") return } guard let proxyHost = proxySettings[kCFNetworkProxiesHTTPProxy] as? String, let proxyPort = proxySettings[kCFNetworkProxiesHTTPPort] as? Int else { + unsetenv("http_proxy") return } let httpProxy = "http://\(proxyHost):\(proxyPort)" From 02b7f29a9247d08ba55d3b5cf8475fa8ffc9deb5 Mon Sep 17 00:00:00 2001 From: kingslay Date: Fri, 16 Feb 2024 19:05:44 +0800 Subject: [PATCH 05/17] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/KSPlayer/AVPlayer/KSOptions.swift | 5 +---- Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift | 7 ++++++- Sources/KSPlayer/MEPlayer/AudioGraphPlayer.swift | 6 +++++- Sources/KSPlayer/MEPlayer/AudioUnitPlayer.swift | 6 +++++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Sources/KSPlayer/AVPlayer/KSOptions.swift b/Sources/KSPlayer/AVPlayer/KSOptions.swift index 3c40b2542..26a75c8c7 100644 --- a/Sources/KSPlayer/AVPlayer/KSOptions.swift +++ b/Sources/KSPlayer/AVPlayer/KSOptions.swift @@ -356,10 +356,7 @@ open class KSOptions { } open func videoClockSync(main: KSClock, nextVideoTime: TimeInterval, fps: Float, frameCount: Int) -> (Double, ClockProcessType) { - var desire = main.getTime() - videoDelay - #if !os(macOS) - desire -= AVAudioSession.sharedInstance().outputLatency - #endif + let desire = main.getTime() - videoDelay let diff = nextVideoTime - desire // print("[video] video diff \(diff) nextVideoTime \(nextVideoTime) main \(main.time.seconds)") if diff >= 1 / Double(max(fps * 2, 100)) { diff --git a/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift b/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift index 03269e4af..ab3cccf00 100644 --- a/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift @@ -307,7 +307,12 @@ public class AudioEnginePlayer: AudioOutput { if let currentRender { let currentPreparePosition = currentRender.timestamp + currentRender.duration * Int64(currentRenderReadOffset) / Int64(currentRender.numberOfSamples) if currentPreparePosition > 0 { - renderSource?.setAudio(time: currentRender.timebase.cmtime(for: currentPreparePosition), position: currentRender.position) + var time = currentRender.timebase.cmtime(for: currentPreparePosition) + #if !os(macOS) + // AVSampleBufferAudioRenderer不需要处理outputLatency,其他音频输出的都要处理,没有蓝牙的话,outputLatency为0.015,有蓝牙耳机的话为0.176 + time = time - CMTime(seconds: AVAudioSession.sharedInstance().outputLatency, preferredTimescale: time.timescale) + #endif + renderSource?.setAudio(time: time, position: currentRender.position) } } } diff --git a/Sources/KSPlayer/MEPlayer/AudioGraphPlayer.swift b/Sources/KSPlayer/MEPlayer/AudioGraphPlayer.swift index 0c9b4487a..62d74e905 100644 --- a/Sources/KSPlayer/MEPlayer/AudioGraphPlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioGraphPlayer.swift @@ -285,7 +285,11 @@ extension AudioGraphPlayer { if let currentRender { let currentPreparePosition = currentRender.timestamp + currentRender.duration * Int64(currentRenderReadOffset) / Int64(currentRender.numberOfSamples) if currentPreparePosition > 0 { - renderSource?.setAudio(time: currentRender.timebase.cmtime(for: currentPreparePosition), position: currentRender.position) + var time = currentRender.timebase.cmtime(for: currentPreparePosition) + #if !os(macOS) + time = time - CMTime(seconds: AVAudioSession.sharedInstance().outputLatency, preferredTimescale: time.timescale) + #endif + renderSource?.setAudio(time: time, position: currentRender.position) } } } diff --git a/Sources/KSPlayer/MEPlayer/AudioUnitPlayer.swift b/Sources/KSPlayer/MEPlayer/AudioUnitPlayer.swift index ba87dc07f..8d1208638 100644 --- a/Sources/KSPlayer/MEPlayer/AudioUnitPlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioUnitPlayer.swift @@ -188,7 +188,11 @@ extension AudioUnitPlayer { if let currentRender { let currentPreparePosition = currentRender.timestamp + currentRender.duration * Int64(currentRenderReadOffset) / Int64(currentRender.numberOfSamples) if currentPreparePosition > 0 { - renderSource?.setAudio(time: currentRender.timebase.cmtime(for: currentPreparePosition), position: currentRender.position) + var time = currentRender.timebase.cmtime(for: currentPreparePosition) + #if !os(macOS) + time = time - CMTime(seconds: AVAudioSession.sharedInstance().outputLatency, preferredTimescale: time.timescale) + #endif + renderSource?.setAudio(time: time, position: currentRender.position) } } } From b973dd8aab3039a3e4d4e705b9d30d3e617c7f23 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 00:16:27 +0800 Subject: [PATCH 06/17] subtitle size for iPad --- Sources/KSPlayer/Subtitle/KSSubtitle.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Sources/KSPlayer/Subtitle/KSSubtitle.swift b/Sources/KSPlayer/Subtitle/KSSubtitle.swift index 4dad2d71d..1a5ce7375 100644 --- a/Sources/KSPlayer/Subtitle/KSSubtitle.swift +++ b/Sources/KSPlayer/Subtitle/KSSubtitle.swift @@ -243,7 +243,11 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 20 #else - return 12 + if UIDevice.current.userInterfaceIdiom == .pad { + return 20 + } else { + return 12 + } #endif case .standard: #if os(tvOS) @@ -251,7 +255,11 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 26 #else - return 16 + if UIDevice.current.userInterfaceIdiom == .pad { + return 26 + } else { + return 16 + } #endif case .large: #if os(tvOS) @@ -259,7 +267,11 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 32 #else - return 20 + if UIDevice.current.userInterfaceIdiom == .pad { + return 32 + } else { + return 20 + } #endif } } From d9b7825b82bb8306f43cbacfd74bbc7243a0f886 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 16:07:18 +0800 Subject: [PATCH 07/17] fix build --- Sources/KSPlayer/Subtitle/KSSubtitle.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/KSPlayer/Subtitle/KSSubtitle.swift b/Sources/KSPlayer/Subtitle/KSSubtitle.swift index 1a5ce7375..aa265bbc4 100644 --- a/Sources/KSPlayer/Subtitle/KSSubtitle.swift +++ b/Sources/KSPlayer/Subtitle/KSSubtitle.swift @@ -243,7 +243,7 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 20 #else - if UIDevice.current.userInterfaceIdiom == .pad { + if UI_USER_INTERFACE_IDIOM() == .pad { return 20 } else { return 12 @@ -255,7 +255,7 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 26 #else - if UIDevice.current.userInterfaceIdiom == .pad { + if UI_USER_INTERFACE_IDIOM() == .pad { return 26 } else { return 16 @@ -267,7 +267,7 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 32 #else - if UIDevice.current.userInterfaceIdiom == .pad { + if UI_USER_INTERFACE_IDIOM() == .pad { return 32 } else { return 20 From 30a07d7dd71bbadbcf26f4b4f657755e69c7d6ec Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 16:58:24 +0800 Subject: [PATCH 08/17] =?UTF-8?q?fix=20=E9=9F=B3=E9=A2=91=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift b/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift index 888de9a21..9c5fa793f 100644 --- a/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift @@ -54,7 +54,12 @@ public class AudioRendererPlayer: AudioOutput { // } } - public func prepare(audioFormat _: AVAudioFormat) {} + public func prepare(audioFormat: AVAudioFormat) { + #if !os(macOS) + try? AVAudioSession.sharedInstance().setPreferredOutputNumberOfChannels(Int(audioFormat.channelCount)) + KSLog("[audio] set preferredOutputNumberOfChannels: \(audioFormat.channelCount)") + #endif + } public func play() { let time: CMTime From 505139acab15dba17a188596e6fed7dd79e8b6a1 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 18:22:02 +0800 Subject: [PATCH 09/17] update ffmpegkit --- .github/workflows/build.yml | 2 +- FFmpegKit | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b4ef7cfe5..c9304f207 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: xcodebuild -version - name: Build run: | - swift build -v + swift build swift build --sdk `xcrun -sdk iphonesimulator -show-sdk-path` -Xswiftc -target -Xswiftc x86_64-apple-ios13.0-simulator swift build --sdk `xcrun -sdk appletvsimulator -show-sdk-path` -Xswiftc -target -Xswiftc x86_64-apple-tvos13.0-simulator swift build --sdk `xcrun -sdk xrsimulator -show-sdk-path` -Xswiftc -target -Xswiftc x86_64-apple-xros1.0-simulator diff --git a/FFmpegKit b/FFmpegKit index 933b6fc12..ff550f31c 160000 --- a/FFmpegKit +++ b/FFmpegKit @@ -1 +1 @@ -Subproject commit 933b6fc12e2ab96bce498058ed7d6f085859b47b +Subproject commit ff550f31ce094ab4f6e80ecea179e51ec17e8875 From 763dc90deed988853c1d177b02fd7f1dcf700dda Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 18:26:33 +0800 Subject: [PATCH 10/17] =?UTF-8?q?remove=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/KSPlayer/MEPlayer/Model.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/KSPlayer/MEPlayer/Model.swift b/Sources/KSPlayer/MEPlayer/Model.swift index 2dd24a6ff..e31035ae5 100644 --- a/Sources/KSPlayer/MEPlayer/Model.swift +++ b/Sources/KSPlayer/MEPlayer/Model.swift @@ -81,7 +81,6 @@ public extension KSOptions { static var enableSensor = true static var stackSize = 65536 static var isClearVideoWhereReplace = true - /// true: AVSampleBufferAudioRenderer false: AVAudioEngine static var audioPlayerType: AudioOutput.Type = AudioEnginePlayer.self static var videoPlayerType: (VideoOutput & UIView).Type = MetalPlayView.self static var yadifMode = 1 From aa69d584a0e49c73545ca5b8ea45fdf7bc1440dd Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 18:38:21 +0800 Subject: [PATCH 11/17] fix build --- Sources/KSPlayer/Subtitle/KSSubtitle.swift | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Sources/KSPlayer/Subtitle/KSSubtitle.swift b/Sources/KSPlayer/Subtitle/KSSubtitle.swift index aa265bbc4..2eec3cea8 100644 --- a/Sources/KSPlayer/Subtitle/KSSubtitle.swift +++ b/Sources/KSPlayer/Subtitle/KSSubtitle.swift @@ -243,10 +243,10 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 20 #else - if UI_USER_INTERFACE_IDIOM() == .pad { - return 20 - } else { + if UI_USER_INTERFACE_IDIOM() == .phone { return 12 + } else { + return 20 } #endif case .standard: @@ -255,10 +255,10 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 26 #else - if UI_USER_INTERFACE_IDIOM() == .pad { - return 26 - } else { + if UI_USER_INTERFACE_IDIOM() == .phone { return 16 + } else { + return 26 } #endif case .large: @@ -267,10 +267,10 @@ open class SubtitleModel: ObservableObject { #elseif os(macOS) return 32 #else - if UI_USER_INTERFACE_IDIOM() == .pad { - return 32 - } else { + if UI_USER_INTERFACE_IDIOM() == .phone { return 20 + } else { + return 32 } #endif } From 7387369908721725efe36a6668489c0496dc69ee Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 18:44:19 +0800 Subject: [PATCH 12/17] fix build --- Sources/KSPlayer/Subtitle/KSSubtitle.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/KSPlayer/Subtitle/KSSubtitle.swift b/Sources/KSPlayer/Subtitle/KSSubtitle.swift index 2eec3cea8..67dc33bcb 100644 --- a/Sources/KSPlayer/Subtitle/KSSubtitle.swift +++ b/Sources/KSPlayer/Subtitle/KSSubtitle.swift @@ -240,7 +240,7 @@ open class SubtitleModel: ObservableObject { case .smaller: #if os(tvOS) return 48 - #elseif os(macOS) + #elseif os(macOS) || os(xrOS) return 20 #else if UI_USER_INTERFACE_IDIOM() == .phone { @@ -252,7 +252,7 @@ open class SubtitleModel: ObservableObject { case .standard: #if os(tvOS) return 58 - #elseif os(macOS) + #elseif os(macOS) || os(xrOS) return 26 #else if UI_USER_INTERFACE_IDIOM() == .phone { @@ -264,7 +264,7 @@ open class SubtitleModel: ObservableObject { case .large: #if os(tvOS) return 68 - #elseif os(macOS) + #elseif os(macOS) || os(xrOS) return 32 #else if UI_USER_INTERFACE_IDIOM() == .phone { From 67f12b04908f7861425743c2a8fc247857693936 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 19:36:49 +0800 Subject: [PATCH 13/17] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FFmpegKit | 2 +- Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift | 1 - Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift | 8 +++++++- Sources/KSPlayer/MEPlayer/MetalPlayView.swift | 1 - Sources/KSPlayer/MEPlayer/Model.swift | 1 + 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/FFmpegKit b/FFmpegKit index ff550f31c..f754e0a90 160000 --- a/FFmpegKit +++ b/FFmpegKit @@ -1 +1 @@ -Subproject commit ff550f31ce094ab4f6e80ecea179e51ec17e8875 +Subproject commit f754e0a900ecc615abc59c5809fe53d6098eb994 diff --git a/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift b/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift index ab3cccf00..20ef60788 100644 --- a/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift @@ -14,7 +14,6 @@ public protocol AudioOutput: FrameOutput { var isMuted: Bool { get set } init() func prepare(audioFormat: AVAudioFormat) - func play() } public protocol AudioDynamicsProcessor { diff --git a/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift b/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift index 9c5fa793f..df6c3a08f 100644 --- a/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift +++ b/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift @@ -129,8 +129,14 @@ public class AudioRendererPlayer: AudioOutput { render = AudioFrame(array: array) } if let sampleBuffer = render.toCMSampleBuffer() { - renderer.audioTimePitchAlgorithm = render.audioFormat.channelCount > 2 ? .spectral : .timeDomain + let channelCount = render.audioFormat.channelCount + renderer.audioTimePitchAlgorithm = channelCount > 2 ? .spectral : .timeDomain renderer.enqueue(sampleBuffer) + #if !os(macOS) + if AVAudioSession.sharedInstance().preferredInputNumberOfChannels != channelCount { + try? AVAudioSession.sharedInstance().setPreferredOutputNumberOfChannels(Int(channelCount)) + } + #endif } } } diff --git a/Sources/KSPlayer/MEPlayer/MetalPlayView.swift b/Sources/KSPlayer/MEPlayer/MetalPlayView.swift index e551ee6a6..19e4167d4 100644 --- a/Sources/KSPlayer/MEPlayer/MetalPlayView.swift +++ b/Sources/KSPlayer/MEPlayer/MetalPlayView.swift @@ -22,7 +22,6 @@ public protocol VideoOutput: FrameOutput { var pixelBuffer: PixelBufferProtocol? { get } init(options: KSOptions) func invalidate() - func play() func readNextFrame() } diff --git a/Sources/KSPlayer/MEPlayer/Model.swift b/Sources/KSPlayer/MEPlayer/Model.swift index e31035ae5..a9dedde84 100644 --- a/Sources/KSPlayer/MEPlayer/Model.swift +++ b/Sources/KSPlayer/MEPlayer/Model.swift @@ -67,6 +67,7 @@ public protocol FrameOutput: AnyObject { var renderSource: OutputRenderSourceDelegate? { get set } func pause() func flush() + func play() } protocol MEFrame: ObjectQueueItem { From 7017a197145e1ea9b77bfcafc210da2ee6782d00 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 19:58:08 +0800 Subject: [PATCH 14/17] update --- FFmpegKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FFmpegKit b/FFmpegKit index f754e0a90..51f123072 160000 --- a/FFmpegKit +++ b/FFmpegKit @@ -1 +1 @@ -Subproject commit f754e0a900ecc615abc59c5809fe53d6098eb994 +Subproject commit 51f1230724b87e9bf77e939e167fc9860622a52d From f03b2684ad65a1de40394f27cc8dc90fe51ff877 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sat, 17 Feb 2024 23:47:16 +0800 Subject: [PATCH 15/17] add annotation --- Sources/KSPlayer/AVPlayer/KSOptions.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/KSPlayer/AVPlayer/KSOptions.swift b/Sources/KSPlayer/AVPlayer/KSOptions.swift index 26a75c8c7..351f21d86 100644 --- a/Sources/KSPlayer/AVPlayer/KSOptions.swift +++ b/Sources/KSPlayer/AVPlayer/KSOptions.swift @@ -38,6 +38,7 @@ open class KSOptions { */ public var seekFlags = Int32(1) // ffmpeg only cache http + // 这个开关不能用,因为ff_tempfile: Cannot open temporary file public var cache = false // record stream public var outputURL: URL? From d8e79cc19f2d643786ce0cc93dc7c49eabaa71c3 Mon Sep 17 00:00:00 2001 From: kingslay Date: Sun, 18 Feb 2024 21:49:24 +0800 Subject: [PATCH 16/17] fix audio --- Sources/KSPlayer/MEPlayer/KSMEPlayer.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/KSPlayer/MEPlayer/KSMEPlayer.swift b/Sources/KSPlayer/MEPlayer/KSMEPlayer.swift index 58339e19f..eab2a984e 100644 --- a/Sources/KSPlayer/MEPlayer/KSMEPlayer.swift +++ b/Sources/KSPlayer/MEPlayer/KSMEPlayer.swift @@ -327,6 +327,7 @@ extension KSMEPlayer: MediaPlayerProtocol { } self.options = options playerItem.delegate = self + audioOutput.flush() audioOutput.renderSource = playerItem videoOutput?.renderSource = playerItem videoOutput?.options = options From 39dda2fbfcde7b5135a64f8109894d4b36849afb Mon Sep 17 00:00:00 2001 From: kingslay Date: Sun, 18 Feb 2024 22:31:41 +0800 Subject: [PATCH 17/17] update ffmpegkit --- FFmpegKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FFmpegKit b/FFmpegKit index 51f123072..081d256d5 160000 --- a/FFmpegKit +++ b/FFmpegKit @@ -1 +1 @@ -Subproject commit 51f1230724b87e9bf77e939e167fc9860622a52d +Subproject commit 081d256d5bffaafdf5e563f646670aca0ee0305b