背景
本人前端开发,在做webrtc视频通话时,在部分安卓手机端,接收webrtc视频流黑屏,由于对webrtc不是太熟悉,一时不知道该如何下手排查。
第一步,发现问题的是安卓手机的webview,查看了webview版本是chrome77,于是在windows安装了chrome77的浏览器做排查,完整的browser可以接收视频流,于是怀疑问题出在webview中,又试了几个手机,发现chrome78的webview也是黑屏,于是怀疑可能是客户端解码的问题。
使用webrtc的getStats检测状态
pc.getStats().then((reports) => {reports.forEach((report) => {if (report.type == 'inbound-rtp' && report.kind == 'video') {//获取收到的视频流状态检测信息console.log('getStats::::::', report);}});}).catch((err) => {console.log(err);});
正常的状态显示如下图:
黑屏的状态如下图:
在输出的状态中发现freamsDecoded:0,没有decoderImplementation解码器字段。
经过一番搜索,发现 Android System Webview M79 以下的版本,无法使用 H264 解码。
详见链接https://bugs.chromium.org/p/chromium/issues/detail?id=801501