Gstreamer多路流同步(翻译自part-synchronisation.txt)
该篇文档描述了gstreamer多路流的同步技术的概要。
GstPipeline的同步用如下的3个组件完成:
1)GstClock,在GstPipeline中对所有元素来说是全局的。
2)GstBuffer的Timestamps。
3)在发送buffer(数据流)之前的NEW_SEGMENT。
A GstClock
~~~~~~~~~~
GstClock单位是纳秒,一个计数器,描述了当前的时间,该值也是绝对时间。
如下的几个源可以提供时间计数器:
1)系统时间,微妙级的精度,用g_get_current_time函数获取。
2)音频设备(基于采样率)。
3)一个网络源,例如RTP源,RTP包中带有时间戳。
......
在Gstreamer中,任何元素提供的GstClock对象都可以用到pipeline中。GstPipeline对象将从时钟提供者中选择一个分发给所有其它的元素。
GstClock总是向上递增的,不一定要从0开始。
Running time
~~~~~~~~~~~~
当pipeline选择了一个时钟,它将基于选定的时钟维护running_time,running_time表示处于PLAYING状态的总的时间,按照如下方式计算:
1)如果pipeline的状
该篇文档描述了gstreamer多路流的同步技术的概要。
GstPipeline的同步用如下的3个组件完成:
1)GstClock,在GstPipeline中对所有元素来说是全局的。
2)GstBuffer的Timestamps。
3)在发送buffer(数据流)之前的NEW_SEGMENT。
A GstClock
~~~~~~~~~~
GstClock单位是纳秒,一个计数器,描述了当前的时间,该值也是绝对时间。
如下的几个源可以提供时间计数器:
1)系统时间,微妙级的精度,用g_get_current_time函数获取。
2)音频设备(基于采样率)。
3)一个网络源,例如RTP源,RTP包中带有时间戳。
......
在Gstreamer中,任何元素提供的GstClock对象都可以用到pipeline中。GstPipeline对象将从时钟提供者中选择一个分发给所有其它的元素。
GstClock总是向上递增的,不一定要从0开始。
Running time
~~~~~~~~~~~~
当pipeline选择了一个时钟,它将基于选定的时钟维护running_time,running_time表示处于PLAYING状态的总的时间,按照如下方式计算:
1)如果pipeline的状