From 0388ae2a45426fc75141e1c8bca3da902f7f3bb5 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 2 Jul 2026 22:31:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20add=20diagnostics=20for=20local=20file?= =?UTF-8?q?=20playback=20=E2=80=94=20file=20existence,=20audio=20route,=20?= =?UTF-8?q?player=20rate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/PlayerBridge.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Sources/PlayerBridge.swift b/Sources/PlayerBridge.swift index 57408d9..082f5f4 100644 --- a/Sources/PlayerBridge.swift +++ b/Sources/PlayerBridge.swift @@ -168,9 +168,12 @@ final class PlayerBridge: ObservableObject { let session = AVAudioSession.sharedInstance() try session.setCategory(.playback, mode: .default) try session.setActive(true) - NSLog("[MiniPlayer] AVAudioSession configured: playback + default") + let route = session.currentRoute + let outputs = route.outputs.map { "\($0.portName)(\($0.portType.rawValue))" }.joined(separator: ", ") + NSLog("[MiniPlayer] AVAudioSession configured: playback+default, outputs=[%@], secondaryAudioShouldBeSilencedHint=%d", + outputs, session.secondaryAudioShouldBeSilencedHint) } catch { - NSLog("[MiniPlayer] AVAudioSession setup failed: \(error.localizedDescription)") + NSLog("[MiniPlayer] AVAudioSession setup failed: %@", error.localizedDescription) } } #endif @@ -242,6 +245,15 @@ final class PlayerBridge: ObservableObject { let item = queue[index] print("[MiniPlayer] playIndex(\(index)): \(item.url.absoluteString)") + // 本地文件诊断:检查文件是否存在和可读 + if item.url.isFileURL { + let path = item.url.path + let exists = FileManager.default.fileExists(atPath: path) + let readable = FileManager.default.isReadableFile(atPath: path) + let fileSize = (try? FileManager.default.attributesOfItem(atPath: path)[.size] as? Int) ?? 0 + print("[MiniPlayer] Local file check: exists=\(exists), readable=\(readable), size=\(fileSize), path=\(path)") + } + // 先清除旧的 KVO,避免野指针 itemStatusObserver?.invalidate() itemStatusObserver = nil @@ -260,7 +272,7 @@ final class PlayerBridge: ObservableObject { player.replaceCurrentItem(with: playerItem) player.play() isPlaying = true - print("[MiniPlayer] player.play() called, rate=\(player.rate)") + print("[MiniPlayer] player.play() called, rate=\(player.rate), timeControlStatus=\(player.timeControlStatus.rawValue)") cachedDuration = 0 progressRatio = 0