MPEG2_TS(二)-PCR控制发送速度原理

来源:互联网 发布:sql 查看表约束 编辑:程序博客网 时间:2024/06/11 05:36

MPEG2_TS(二)-PCR控制发送速度原理

一·目的:本文所讲是通过PCR控制TS文件发送给UDP的速率,以便用vlc来接收数据时不会产生“空”,或溢出的情况。
   截取一位网友的话:
泛泛讲点其他的东西,为什么要用pcr来控制发送速度:通常硬件ASI卡传送ts数据,是依靠码率来控制速度。假设ts是2Mb的码率,那么ASI卡的发送速度就固定控制在2Mb。
如果ts的码率有波动变化,就在ts中插入空白数据包,强行将ts的码率提高到一个固定的码率值。这是硬件ASI卡传送ts通常使用的方式。
在以太网上传送ts数据,考虑到以太网传输速度的不稳定性,udp的丢包性质,和socket的发送接收缓冲区,插入空包将ts码率提高到一个固定码率的做法已经没有了意义,
因为上面那些因素,以太网的发送速度不能像ASI卡那样固定。插入空白数据包,把码率提高到一个固定值的做法也比较多此一举。
所以,根据ts流自己携带的pcr时钟信息,来进行同步控制发送速度,比根据码率来控制发送速度,更准确,也更有适应性。在ts码率有波动,并且波动比较大的情况下,
根据码率来控制发送速度无疑是不准确的。
二·流程:
   1:


   2:


   3:


   4:



   5:根据码速率控制发送速度

三·细节:
   1:在流程5的时候,注意sleep是毫秒级别的算出来的数据时double型,要-1才能匹配上。
   2:最后一个要发送的数据长度:


   这里sleep时间要注意。
   3:本demo中码速率(rate)是以帧数据算出来一个,然后算发送的sleep时间,网上查找也可以用多帧的rate算平均值来算出sleep时间。这样我没有做,不知道可不可以。
   4:本demo对文件末尾的处理没有完善,可以进行完善。
   5:本demo是对本地文件的读取发送到vlc上,vlc:(udp://172.19.52.53:6000),也可以扩展到直播,处理方面要改进。
注:本demo地址在我的csdn上:http://download.csdn.net/detail/zhuweigangzwg/5075357
    如果愿意交流的也可以加我QQ:379969650

原创粉丝点击