我正在解码一个视频格式,该视频格式在单独的文件中包含伴音轨道。根据规格,我每1/75秒渲染一帧视频。并且视频文件的长度与音轨的长度相同。
我正在使用音频队列服务播放音频(我之所以选择,因为我认为有些情况下我需要精确的时序控制 - 就像我遇到的情况一样!)。这是一个很大的API,我没有超过Apple的编程指南中的示例代码(虽然我已经用更好的ObjC API包装了)。
在理想情况下,基本播放设置可以正常工作。视频和音频保持同步,并且两者同时结束(在我自己的能力范围内区分)。但是,如果性能打嗝(或者我附上Leaks Instrument或其他东西),它们会很快失去同步。
这是我第一次写出这种性质的东西:我之前没有声音或视频的经验。我当然没有音频队列服务的经验。所以我不确定从哪里开始。
你做过这样的事吗?你有什么建议或提示或技巧吗?我需要阅读一些基本的文档吗?任何帮助将不胜感激。答案 0 :(得分:2)
首先,我从来没有真正编过这样的东西,所以我从臀部开始拍摄。此外,我已经使用HAL和AUHAL进行了大量的编程,但从未使用过AudioQueue,因此我的方法可能不是使用AQ的最佳方式。
显然,首先要决定是将音频同步到视频还是将视频同步到音频。从问题看来,你似乎已经决定视频将成为主视频,音频应该同步到它。
我会通过跟踪渲染的视频帧数以及帧速率来解决这个问题。然后,当您将音频缓冲区排入队列时,不是为startTime传递单调递增的值,而是调整缓冲区的开始时间以匹配视频中观察到的任何不连续性。这有点模糊,因为我不确切地知道你的音频来自哪里或者你如何将它排队,但希望原则很明确。