ios - AVFoundation中,如何同步录制和播放

标签 ios synchronization avfoundation avplayer avcapturesession

我有兴趣在 iOS 中使用 AVCaptureSession 录制媒体,同时使用 AVPlayer 播放媒体(具体来说,我正在播放音频和录制视频,但我不确定这是否重要)。

问题是,当我稍后一起播放生成的媒体时,它们不同步。是否可以通过确保播放和录制同时开始,或者通过发现它们之间的偏移量来同步它们?我可能需要同步大约为 10 毫秒。假设我总是可以捕获音频是不合理的(因为用户可能会使用耳机),因此通过分析原始音频和录制的音频进行同步不是一种选择。

This question建议可以同时结束播放和录制,并以此方式确定与结果长度的初始偏移量,但我不清楚如何让它们同时结束。我有两种情况:1) 音频播放结束,和 2),用户点击“停止录制”按钮。

This question建议启动,然后应用固定但可能与设备相关的延迟,这显然是一种 hack,但如果它对音频足够好,显然值得考虑用于视频。

我可以使用另一个媒体层来执行所需的同步吗?

相关:this question没有答案。

最佳答案

如果您专门使用 AVPlayer 来播放音频,我建议您使用 AudioQueueServices。它无缝且快速,因为它逐个缓冲区读取缓冲区和播放暂停比 AVPLlayer 更快

也有可能您错过了 [avPlayer prepareToPlay] 的初始语句,这可能会导致它在播放音频之前同步的开销很大。 希望对你有帮助。

关于ios - AVFoundation中,如何同步录制和播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803788/

相关文章:

ios - 获取相册中最后保存的照片

iphone - 从使用 AVAssetWriter 创建的视频生成缩略图

ios - 有什么方法可以控制何时使用 Game Center 进行身份验证?

ios - 在不使用 <embed> 标签的情况下使用 <html> 在 iOS 浏览器中显示 <svg>

ios - iOS是否有“公平”的同步机制

java - Android 可分块对象在 Activity 之间克隆

ios - 使用 Swift 按字母顺序对 TableView 单元格进行排序

ios - 如何在表格 View 中创建单选按钮

multithreading - 如何在多线程游戏引擎中保持我的世界数据同步?

iphone - ios 使用 AVFramework 捕获图像