AVCaptureMovieFileOutput audio/video 同步
AVCaptureMovieFileOutput audio/video synchronization
我已经编写了一个小应用程序来使用 AVCaptureMovieFileOutput
捕获音频和视频,效果很好。用于连续多天自动采集实验数据,偶尔开启一次记录10-15秒。
但在分析数据时,我们发现音频和视频同步似乎存在一些偏差。为了帮助测试这一点,我们设置了一个闪烁的 LED 灯和一个音调,并在几天内记录了一小段。到第五天,音频出现大约 250 毫秒的延迟(不是很大,但在观看时很明显)。下图显示了使用相同 AVFoundation
库读回的数据(以确保媒体解码没有问题)。绘制了视频的平均强度(以显示 LED 闪光灯),原始音频绘制在下方。
这有点神秘,我希望找出可能导致此问题的原因,以便我可以修复它或解决它。到目前为止,我的理论是:
一个纯粹的硬件问题(我们使用 NTSC 加密狗),信号的数字化或加密狗上的时钟有某种偏差或漂移。我对硬件方面的了解还不够,无法进行调查。
与音频和视频的帧持续时间计数有关的舍入问题,随着时间的推移会累积轻微的偏移量。如果是这种情况,我们可能会计算出预期的偏移量并对其进行调整。
我意识到这是 AVCaptureMovieFieldOutput
用法的一个极端案例,但会重视其他人的任何反馈。
我怀疑这些是否特定于代码,但往往是更广泛的实现细节。该代码与 AVFoundation 文档中的标准电影捕获示例非常相似,具有精确的帧开始时间。该项目在 GitHub.
进一步分析表明,这是我们使用的视频捕获硬件中的一个特定缺陷,其内部时钟存在某种漂移。在几天内从其他硬件捕获并没有表现出同样增加的延迟。
我目前的解决方法是增加延迟似乎是线性的(每天约 170 毫秒),因此可以很好地预测。
我已经编写了一个小应用程序来使用 AVCaptureMovieFileOutput
捕获音频和视频,效果很好。用于连续多天自动采集实验数据,偶尔开启一次记录10-15秒。
但在分析数据时,我们发现音频和视频同步似乎存在一些偏差。为了帮助测试这一点,我们设置了一个闪烁的 LED 灯和一个音调,并在几天内记录了一小段。到第五天,音频出现大约 250 毫秒的延迟(不是很大,但在观看时很明显)。下图显示了使用相同 AVFoundation
库读回的数据(以确保媒体解码没有问题)。绘制了视频的平均强度(以显示 LED 闪光灯),原始音频绘制在下方。
这有点神秘,我希望找出可能导致此问题的原因,以便我可以修复它或解决它。到目前为止,我的理论是:
一个纯粹的硬件问题(我们使用 NTSC 加密狗),信号的数字化或加密狗上的时钟有某种偏差或漂移。我对硬件方面的了解还不够,无法进行调查。
与音频和视频的帧持续时间计数有关的舍入问题,随着时间的推移会累积轻微的偏移量。如果是这种情况,我们可能会计算出预期的偏移量并对其进行调整。
我意识到这是 AVCaptureMovieFieldOutput
用法的一个极端案例,但会重视其他人的任何反馈。
我怀疑这些是否特定于代码,但往往是更广泛的实现细节。该代码与 AVFoundation 文档中的标准电影捕获示例非常相似,具有精确的帧开始时间。该项目在 GitHub.
进一步分析表明,这是我们使用的视频捕获硬件中的一个特定缺陷,其内部时钟存在某种漂移。在几天内从其他硬件捕获并没有表现出同样增加的延迟。
我目前的解决方法是增加延迟似乎是线性的(每天约 170 毫秒),因此可以很好地预测。