(亲身经历)freeswitch/ffmpeg出现“concealing * DC, * AC, * MV errors in P frame”的一种情况排查

最近用freeswitch做视频会议的时候,报这样一个错误,例如“concealing 9 DC, 9 AC, 9 MV errors in P frame”,导致视频画面花屏;起初也和大家网上各种搜,最终无果;

本人环境:WINDOWS 10 64位,freeswitch-1.10.1,ffmpeg的版本为4.1.0

关键点:抓包结合代码分析

分析过程:

1. 出现这个问题的时候比较懵,一时半会儿不知如何下手,这种时候一般手段,抓个包看下,分析一下问题;

上面是我的包,发现看不出问题,这个时候需要结合代码,在代码中打印出错的帧的seqnumber,从而定位到该地方;此处我是在freeswitch工程中打印的,如果是各位在用ffmpeg解码的话,也需要在相应的地方打印“SEQ=? SIZE=?”,这样能够快速的定位到哪些包是错误包;

2. 在我的排查过程中,发现,总是出现SIZE=4096时,出现以上错误,这个4096是我这边的buf_size,难道正好撑满了,哪有那么巧的事?这个时候,我想到了是否是读取数据不完整,超出了缓存区长度呢?

3. 继续跟踪和定位代码,最终找到填充这个buf缓存的代码段,发现在recv_from数据的时候,一次读取的长度是根据这个4096来的,我最终将这个4096改成了,4096*2,则问题解决;

结论: 如果你遇到跟我类似的错误,那么别慌,沉住气,慢慢打印日志和跟踪代码;我这边只是提供一种我遇到的情况,请检查你的程序中缓存这个264包的缓存区是否不够大??代码在接收RTP包时,是否够存呢???

此外:如有其他情况,也可以留言告诉我哦。

发布了61 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/shayueqing/article/details/103374255