我试图确定在使用 AirPods 时经历了多少延迟,与使用设备麦克风和扬声器相比,为了录制必须同步到背景音轨的用户视频和音频。
以下是我的系统目前的工作方式:
我有一个使用 AVCaptureSession 录制视频和 AVAudioEngine 录制音频的录制管道。
在录制过程中,我通过用户将“执行”的 AVAudioEngine 播放音频。我使用 AVAssetWriter 创建了一个电影文件,其中将用户捕获的音频(利用噪声消除)添加到文件中,并将背景音频文件写入单独的轨道。
音频文件的演示时间戳稍作修改,以解决在 AVAudioEngine 中经历的初始播放延迟。这很好用(我之前使用 AVPlayer 进行音频播放,并且开始延迟更显着,这就是导致使用这种技术的原因)。
我知道 AVAudioSession 的 inputLatency、outputLatency 和 bufferDuration 属性,并且我读过这些属性可以用来识别延迟,至少在某种意义上是这样。我注意到这个计算得出的总往返延迟在单独使用设备时约为 0.01 秒,在使用 AirPods 的输入和输出时为 0.05 秒。
这很有用,我可以在我自己的逻辑中应用额外的时间差来改进同步,但输出中肯定有额外的延迟,我无法识别它的来源。
奇怪的是,录制的音频和视频看起来好像是同步的,但与背景音轨不同步。这让我认为系统仍在为这两种形式的捕获媒体中的一种添加补偿,但它与活动播放的音频无关,因此用户可能正在收听延迟播放的音频,而我不考虑额外的延迟。
有人对可能需要考虑的其他事项有任何想法吗?我觉得蓝牙同步的大多数用例将是同步音频和视频输出,或者在录制时仅同步音频和视频输入,而不是用户在设备上与音频或视频源一起执行的第三个因素稍后添加到生成的资产写入会话/媒体文件中。