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

iOS:处理来自AVPlayer视频轨道的音频,第1张

概述我打算在我的iOS应用程序中重构我的录音系统. 语境: 到目前为止,我分别录制视频音频,同时开始大致录制.一旦完成记录,同样的系统,我分别播放视频和音频,在音频上动态应用AudioUnits.最后,我合并了视频和修改过的音频. 碰巧两个记录不会同时启动(出于任何原因),从而产生不同步的结果. 是否可以像这样重构我的系统: 1) Record normal video with audio int 我打算在我的iOS应用程序中重构我的录音系统.
语境:
到目前为止,我分别录制视频和音频,同时开始大致录制.一旦完成记录,同样的系统,我分别播放视频和音频,在音频上动态应用AudioUnits.最后,我合并了视频和修改过的音频.
碰巧两个记录不会同时启动(出于任何原因),从而产生不同步的结果.

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

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 timevar audioClock = CMClockGetHostTimeClock()// your vIDeo playerlet vIDeoPlayer = AVPlayer( url: vIDeoURL )vIDeoPlayer.masterClock = audioClockvIDeoPlayer.automaticallyWaitsToMinimizeStalling = false....var audioPlayer: AKPlayer?// your vIDeo-audio playerif 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离线处理是否已准备就绪,因此您可能需要实时播放音频以捕获处理输出.

总结

以上是内存溢出为你收集整理的iOS:处理来自AVPlayer视频轨道的音频全部内容,希望文章能够帮你解决iOS:处理来自AVPlayer视频轨道的音频所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1063540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存