一 概述
Gstreamer的音频视频同步,概括起来是一个比较大的问题,因为在网上可以看到很多音视频同步的办法。这里我们只看最普通的一种。以音频时钟做为参考时钟(要求参考时钟上的时间是线性递增的);生成数据流时依据参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间);在播放时,读取数据上的时间戳,同时参考当前参考时钟上的时间来安排播放(如果数据块上的时间大于参考时钟的时间,则不急于播放,直到参考时钟达到数据块的开始时间;如果数据块上的时间小于参考时钟的时间,则应"尽快"播放或者干脆"丢弃"该数据块,以使得播放赶上播放进度。)
Gstreamer的因视频分离器如下图:
demux element将音频,视频分离后,给各自的解码器进行解码播放。
+-----------+
| Audio |
+--| |
/ +-----------+
+----------+ /
| demux |/
| |\
+----------+ \
\ +-----------+
+--| Video |
| |
+-----------+
二 提供时钟