我正在使用 ffmpeg
创建一个非常基本的视频播放器。库,我有所有的解码和重新编码,但我坚持音频视频同步。
我的问题是,电影有音频和视频流混合(交织),音频和视频以“突发”(多个音频包,然后是并列的视频帧)的方式出现,就像这样,每个包都有自己的时间戳:
A A A A A A A A V V V V A A A A A A A V V V V ...
A: decoded and re-encoded audio data chunk
V: decoded and re-encoded video frame
据说是为了防止在没有视频的情况下处理过多的音频,反之亦然。
现在我必须对“突发”进行解码,并及时将它们发送到音频/视频播放组件,我有点迷失在细节上。
因为我不期待这样的事情:
AAAAAAAAAAA .... AAAAAAAAAAAAA x10000 VVVVVVVVVVVVVV x1000
audio for the whole clip followed by video
或这个:
VVVVVVVVVVVV x1000 AAAAAAAAAAA...AAAAAAAAA x1000
all video frames followed by the audio
发生在编码良好的视频中(毕竟,防止这种极端情况是混合的全部意义......)
谢谢!
更新 :由于我的描述可能不清楚,因此问题不在于流是怎样的,或者如何解码它们:整个音频/视频解复用、解码、重新缩放和重新编码都已设置和声音,以及每个数据 block 有自己的时间戳。
我的问题是如何处理解码后的数据,而不会导致缓冲区溢出和欠载,并且通常会阻塞我的管道,所以我想这可能被认为是"dispatch"问题。
最佳答案
同步是容器的工作。每帧都将带有 PTS/DTS 或持续时间/CTS 的时间戳
关于audio - 播放:音视频同步算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38804377/