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