fix: use kCMPersistentTrackID_Invalid for HLS audio tap

Root cause found: HLS variant switching changes audio trackID mid-recording
(e.g. 2→10). Binding to a specific trackID causes tap to never fire.
Using kCMPersistentTrackID_Invalid (wildcard) matches all audio tracks
regardless of variant switches.
This commit is contained in:
yumoqing 2026-06-28 10:24:04 +08:00
parent 4ba3ccde21
commit cff2bd2793

View File

@ -375,9 +375,10 @@ final class PlayerRecorder: NSObject {
return return
} }
// AudioMix // 使 kCMPersistentTrackID_Invalid
// HLS variant trackID 210 ID
let inputParams = AVMutableAudioMixInputParameters() let inputParams = AVMutableAudioMixInputParameters()
inputParams.trackID = audioTrackID inputParams.trackID = kCMPersistentTrackID_Invalid
inputParams.audioTapProcessor = tapRef inputParams.audioTapProcessor = tapRef
let audioMix = AVMutableAudioMix() let audioMix = AVMutableAudioMix()
@ -393,7 +394,7 @@ final class PlayerRecorder: NSObject {
} }
print("[Recorder:DIAG] === installAudioTap DONE ===") print("[Recorder:DIAG] === installAudioTap DONE ===")
ctx.mixTrackID = audioTrackID ctx.mixTrackID = kCMPersistentTrackID_Invalid
// //
var diagLog = "=== installAudioTap Log ===\n" var diagLog = "=== installAudioTap Log ===\n"
@ -403,7 +404,8 @@ final class PlayerRecorder: NSObject {
for (i, t) in itemTracks.enumerated() { for (i, t) in itemTracks.enumerated() {
diagLog += " itemTrack[\(i)]: trackID=\(t.assetTrack?.trackID ?? -1) mediaType=\(t.assetTrack?.mediaType.rawValue ?? "?") enabled=\(t.isEnabled)\n" diagLog += " itemTrack[\(i)]: trackID=\(t.assetTrack?.trackID ?? -1) mediaType=\(t.assetTrack?.mediaType.rawValue ?? "?") enabled=\(t.isEnabled)\n"
} }
diagLog += "Audio trackID used: \(audioTrackID)\n" diagLog += "Audio trackID used: kCMPersistentTrackID_Invalid (wildcard, matches all)\n"
diagLog += "Discovered audio trackID: \(audioTrackID)\n"
diagLog += "TapCreate status: \(tapStatus)\n" diagLog += "TapCreate status: \(tapStatus)\n"
diagLog += "audioMix set: \(verifyMix != nil)\n" diagLog += "audioMix set: \(verifyMix != nil)\n"
writeDiagLog(diagLog) writeDiagLog(diagLog)