本文主要介绍音视频通话中收到第一帧图像后视频一直卡住的问题,文章来自博客园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查找.

最新文章

  1. Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)
  2. Thinking in java中关于Exception的一道面试题.
  3. Android抓包方法(二)之Tcpdump命令+Wireshark
  4. 如何提升我的HTML&CSS技术,编写有结构的代码
  5. android设置背景半透明效果
  6. HDU 5002 Tree(动态树LCT)(2014 ACM/ICPC Asia Regional Anshan Online)
  7. a different object with the same identifier,同一个session中存在不同的对象问题
  8. 51nod 1257 背包问题 V3
  9. MFC的dll中控制资源问题
  10. ios 排序汇总
  11. 将与系统时间格式不同的字符串格式化为DATETIME类型
  12. Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案
  13. Android-用你自己的自定义图像资源(2)
  14. js中年份、月份下拉框
  15. IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持
  16. 知识点:synchronized 原理分析
  17. python 之 初识面向对象
  18. bzoj1239
  19. 11 并发编程-(线程)-信号量&Event&定时器
  20. salt之pillar组件

热门文章

  1. 内网Linux对公网开启SSH
  2. Access“存储过程"参数顺序要与执行代码生成的参数顺序一致
  3. .net常用组件
  4. 一机运行多个resin的配置
  5. [datatable]两个DataTable 连接
  6. Codeforces 452D [模拟][贪心]
  7. ListView的position的保持
  8. Altera SoC 内核更新3.7到3.10
  9. Configure apt-get / git/ curl to use a proxy (Ubuntu)
  10. 菜鸟-手把手教你把Acegi应用到实际项目中(11)-切换用户