iOS:处理来自 AVPlayer 视频轨道的音频

2024-01-02

我计划在我的 iOS 应用程序中重构我的录音系统。 语境: 到目前为止,我分别录制视频和音频,几乎同时开始录制。录制完成后,在同一系统中,我分别播放视频和音频,在音频上动态应用 AudioUnit。最后,我合并视频和修改后的音频。 碰巧两个记录不会同时启动(出于任何原因),从而产生不同步的结果。

是否可以像这样重构我的系统:

1) Record normal video with audio into mov file --> I would be sure that audio+video would be synchronized.

2) During viewing the result with AVPlayer, process the audio part on the fly. (I will use AudioKit) --> that's the part I m not confident. 
   Would I be able to send the audio buffer to Audiokit (which would process it) and give back the processed audio to AVPlayer like if it was the original AVPlayer audio part?

3) Save a final file with video and audio modified --> easy part with AVFundation

请询问任何信息;)


我可以想到一种相当简单的方法来做到这一点。

基本上,您只需在 AKPlayer 实例中打开视频文件即可。然后,您将视频音频静音。现在,您在 AudioKit 中拥有了视频音频。使用通用时钟将视频和音频锁定在一起非常简单。流程的伪代码:

// This will represent a common clock using the host time
var audioClock = CMClockGetHostTimeClock()

// your video player
let videoPlayer = AVPlayer( url: videoURL )
videoPlayer.masterClock = audioClock
videoPlayer.automaticallyWaitsToMinimizeStalling = false

....

var audioPlayer: AKPlayer?

// your video-audio player
if let player = try? AKPlayer(url: videoURL) {
    audioPlayer = player
}

func schedulePlayback(videoTime: TimeInterval, audioTime: TimeInterval, hostTime: UInt64 ) {
    audioPlay( audioTime, hostTime: hostTime )
    videoPlay(at: 0, hostTime: hostTime)
}


func audioPlay(at time: TimeInterval = 0, hostTime: UInt64 = 0) {
    audioPlayer.play(when: time, hostTime: hostTime)    
}

func videoPlay(at time: TimeInterval = 0, hostTime: UInt64 = 0 ) {
    let cmHostTime = CMClockMakeHostTimeFromSystemUnits(hostTime)
    let cmVTime = CMTimeMakeWithSeconds(time, 1000000)
    let futureTime = CMTimeAdd(cmHostTime, cmVTime)
    videoPlayer.setRate(1, time: kCMTimeInvalid, atHostTime: futureTime)
}

您可以以正常方式将播放器连接到任何 AudioKit 处理链。

当您想要导出音频时,请在最终输出处理链上运行 AKNodeRecorder。将其记录到文件中,然后将音频合并到视频中。我不确定正在处理的 AudioKit 离线处理是否已经准备好,因此您可能需要实时播放音频以捕获处理输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS:处理来自 AVPlayer 视频轨道的音频 的相关文章

随机推荐