最近业务应用开发小伙伴报告一个问题,公司新的app在通话过程中一直显示黑屏,而且是毕现的,需要协助一下。
问题排查
按照之前小伙伴反馈的现象,操作步骤,很快我们就复现了该问题。所以一次排查了网络传输,拆包组装,视频帧解码,视频渲染交付等相关流程。
最后发现数据收发正常,没有存在丢包,抖动,延迟等弱网条件;拆包组装也是正常的,Jitterbuffer模块可以完整获取所有数据帧;视频帧送解码前保存了H264裸流,可以正常观看;解码之后的YUV数据也是正常的;交付渲染线程的YUV数据也是正常的。
经过逐一排查,我们SDK所有流程都没啥问题,那就奇怪了。后来和应用研发反复沟通,应用同学坚持认为现在的代码和之前的一个平台上的是一致的(可以正常播放),而这个平台却无法使用,这就是我们的锅,需要背着。经过和小伙伴扯皮一下子,最后把小伙伴使用的应用层代码也pull下来,完成整个链路的分析。
为了确认和我们SDK没有关系,尝试将应用层获取视频流的地方导出数据,同时将Activity的View设置成red背景色,问题依然存在,目前大概率是View背身的问题,和我们没太大关系。但是应用同学仍然不认可。
所以我们继续深入review代码。
经过九九八十一道弯弯之后发现了问题,原先小伙伴最近做了重构,多设置了一个SurfaceView参数。
解决方案就是在该Activity上将这段代码移除即可。
补充知识
Android开发者手册上是这样描述:
- LAYER_TYPE_HARDWARE:如果应用经过硬件加速,视图在硬件中渲染为硬件纹理。如果应用未经过硬件加速,此层类型的行为方式与 LAYER_TYPE_SOFTWARE 相同。
- LAYER_TYPE_SOFTWARE:视图在软件中渲染为位图。
后来又问了一下ChatGPT,关于这段代码的作用:
参考文献
https://developer.android.com/topic/performance/hardware-accel
作者信息:我是一枚爱跑步的程序猿,维护公众号和知乎专栏《MediaStack》,有兴趣可以关注,一起学习音视频知识,时不时分享实战经验。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。