Android IOS WebRTC 音视频开发总结(二一)-- 黑屏问题
2024-10-17 21:22:35
本文主要介绍音视频通话中收到第一帧图像后视频一直卡住的问题,文章来自博客园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查找.
最新文章
- Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)
- Thinking in java中关于Exception的一道面试题.
- Android抓包方法(二)之Tcpdump命令+Wireshark
- 如何提升我的HTML&;CSS技术,编写有结构的代码
- android设置背景半透明效果
- HDU 5002 Tree(动态树LCT)(2014 ACM/ICPC Asia Regional Anshan Online)
- a different object with the same identifier,同一个session中存在不同的对象问题
- 51nod 1257 背包问题 V3
- MFC的dll中控制资源问题
- ios 排序汇总
- 将与系统时间格式不同的字符串格式化为DATETIME类型
- Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案
- Android-用你自己的自定义图像资源(2)
- js中年份、月份下拉框
- IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持
- 知识点:synchronized 原理分析
- python 之 初识面向对象
- bzoj1239
- 11 并发编程-(线程)-信号量&;Event&;定时器
- salt之pillar组件
热门文章
- 内网Linux对公网开启SSH
- Access“存储过程";参数顺序要与执行代码生成的参数顺序一致
- .net常用组件
- 一机运行多个resin的配置
- [datatable]两个DataTable 连接
- Codeforces 452D [模拟][贪心]
- ListView的position的保持
- Altera SoC 内核更新3.7到3.10
- Configure apt-get / git/ curl to use a proxy (Ubuntu)
- 菜鸟-手把手教你把Acegi应用到实际项目中(11)-切换用户