H.264丢包模拟软件设计:

转自:http://download.csdn.net/download/lcl81/5287528

1.随机丢包方法:如果丢包算法合理的话,很容易会出现丢帧现象,所以不用另外搞一个丢帧软件了。丢包参数:丢包比率(丢弃的包除以总包数),丢包粒度(每次丢弃多少个字节),丢包分布(离散性,采用均匀丢包方法可以满需求)

2.测试时,不可能全面覆盖所有的丢包情况,但可以从典型的网络环境中,找到几种典型的丢包用例来测试,再找几种极限丢包用例来测试,只要能模拟出80%的丢包情况,就可以认为,测试通过了。

3.考虑将丢包算法,融入到解码代码中,将生成的“丢了包的视频流”存入内存中,然后再解码。先独立写丢包程序,后再放入到解码代码中。

4.具体算法:首先,将正确的原始视频流分成帧,以帧为单位进行丢包。粒度可以设置为,如典型的网络分包长度1024或者512等,最小0(即不丢包),最大8M(丢帧),以字节为单位,称为“包”。即把一帧分为若干包。将“正确的原始视频流”称为“源流”,将“丢了包的视频流”,称为“目的流”。即将“源流”分成若干“包”,获取到包后,判断是否丢弃,如不丢弃,写入“目的流”。

5.程序仅支持“源流”为,AnnexB的裸H.264视频流。在丢包程序过程中,统计SPS,PPS,I,P,B的最长包,最短包,及平均包长(包数,总长)的值,并打印,用于设置粒度值时,供参考用。还需要统计打印出丢包百分比(即丢弃的总包长除以“源流”的长度),总帧数(SPS,PPS,I,P,B),最终得到“完整的帧”数(SPS,PPS,I,P,B)。

6.包丢弃条件算法:由用户设置第一个丢包位置,一般在0~10之间,设计上可以支持任意值,该值表示“第多少个包”,开始丢弃。由用户设置丢包间隔,如100,表示每隔99包丢1包,大致相当于丢包比率为1/%,如果小于等于1,没有意义,相当于全部丢弃,设计上支持所有大于等于1的值。一般应该设置在1~100之间。

7.总结:用户需设置 1.包长(即粒度),2.起始丢包值,3.丢包间隔 —- 所有参数都为整数。

8.“源流”为场编码的时候,如何计算帧数Medialib中获取一帧,实际是顶场或底场,ffmpeg中,需验证。

9.不分为ipb来统计了,有些麻烦。

来源:haima1998

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年5月26日
下一篇 2014年6月1日

相关推荐