RTC.Blacker

专注RTC和音视频相关领域,支持开源,相关交流请关注微信公众号:blackerteam,或者发邮件到: blacker@rtc.help

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

本文主要介绍音视频通话中收到第一帧图像后视频一直卡住的问题,文章来自博客园RTC.Blacker,转载请说明出处.

 

因为苹果AppStore要求从2015年2月1日开始所有所有上架App必须支持arm64,https://developer.apple.com/news/,

否则不予上架,所以花了不小力气才使得顺利编译成功.谁知道集成到自己产品的时候出问题了(采用自定义传输模块),具体现象如下:

1, ios能正常显示对方图像,但对方只能显示第一帧.

2, 抓包发现双方收发包都正常,说明传输模块没问题.

3, 跟踪渲染和编解码模块,发现编解码和render也正常.

4, 怀疑是下载的64位版本出问题了,甚至搭建AppRTCDemo环境测试.

 

最后:仔细分析抓包结果,发现ios每次发过去的视频包大小都一样,有问题,正常情况下每个视频包不可能一样大.

对着这个疑问我再自己回想整个传输过程, 终于搞明白了, 原来:

rtp包成功发送包后返回的仍然是false,导致底层以为传输失败,所以不停地发送上一个包,具体代码调用流程如下:

看上面的代码可知底层有判断包是否有成功发送,如果成功则移除,否则继续发送,后面还附有RTCP的处理逻辑:

明白了这个原理,改这个BUG就很容易了,后面在自定义传输模块中处理的时候也会更注意.

 

总结:以后查找类似问题的时候应先通过抓包分析大概原因,然后结合代码逻辑分析出可能出问题的模块,最后通过log或debug查找.

posted on 2015-01-28 14:26  RTC.Blacker  阅读(8207)  评论(2编辑  收藏  举报