今天你黑了吗,哈哈,当然不是指的你皮肤变黑了,而是身处在直播浪潮中的你,在观看直播中是否碰见了黑屏的现象,不过不要慌张,接下来就以腾讯云直播为例告诉您引起黑屏的原因以及如何去规避黑屏。
问题描述
简单的来讲呢,就是当我们打开手机或者电脑看一场精彩的直播情况下,屏幕无法渲染出画面,黑乎乎的只能听见声音,没有图像出来,看就是它1-1的现象。
问题原因
黑屏原因千奇百怪,接下来跟着我一起揭开黑屏的神秘原因,我们从两个方面去剖析,一个是影响全局下行用户,一个是影响部分用户。
影响下行所有用户黑屏因素:
(1)主播端摄像头权限:不管是移动端还是PC端去推流,在使用到摄像头都是需要权限申请,如果不赋予权限申请,会出现摄像头权限被禁用的情况,导致主播端视频数据无法采集,从而推出来的只有音频数据
(2)主播端编码失败:我们都知道当摄像头采集完数据后,下一个步骤就是传输到编码器,由于参数配置或者某些机型的硬编兼容性问题,从而导致没有视频数据送入到云端推流服务器。
(3)源流是纯音频流:此图可以看到streams信息只有音频数据的编码信息,没有视频信息。
因为浏览器或者部分播放器而影响局部黑屏因素:
(1)播放端解码异常:播放器遇到不支持的视频格式会导致解析失败,比如目前市面上主流的播放器都是只支持H264的编解码,但是播放H265的直播流会导致解码异常,只有声音没有画面,可以通过此图看到编码是H265方式,ffplay播放黑屏,但是用h265播放器播放即可正常,结尾有彩蛋继续看。
(4)播放器兼容性问题:某种情况下会出现客户自研播放器拉流黑屏,可以使用市面上主流播放器对比,比如VLC,ffplay等。
(5)关键帧的问题:推流设置的关键帧3s一个片,如果2s一个片,会出现短暂的黑屏现象,原因拉取到的ts没有关键帧导致无法解析。vlc播放器情况下可能会黑2秒,如果使用火狐可能直接跳过没有关键帧的片,自研播放器可能一直黑屏,大概率原因是播放器只判断了第一个ts里面帧的类型,后面不再进行判断,导致一直黑屏下去。如何查看关键帧可以通过videoeye查看,看type类型,两个I帧,通过两个pts相减,即可得到关键帧间隔。
(6)数据内容/格式异常也会导致解码失败:ffplay播放,是否缺少pps和sps信息,某些情况下缺少sps和pps会导致播放器解码异常。
现在呢我们既然找到了问题的所在,接下来跟着我走看看如何去避免这些小问题的发生
解决方案
(1)针对摄像头权限问题:App 侧做好权限处理问题,增加对摄像头和麦克风的检测判断,如果检测到未获取对应的权限,则禁止主播开播,并提示授予权限。
(2)sdk端增加对主播流信息的帧率监测,如果在监测到流信息帧率为0的情况下,同时确定采集到了视频数据,大概率就是编码器的原因,这时可以通过sdk的log看看具体报错信息加以定位
(3)播放端解码异常:(1)可以通过ffplay查看video信息是否是hevc编码格式,此编码格式代表h265,这种情况下一种是需要专用播放器播放,一种是通过腾讯云云端转码为h264解决。
(4)缺少关键帧导致黑屏:针对此问题两种解决方案,一种是按照关键帧切割,一种是ts切片包含关键帧,切割ts时长大于关键帧间隔时间
留言讨论
产生黑屏的原因多种多样,不同的场景下遇到的黑屏原因不同,以上的原因可能不足,有遇到新的黑屏情况欢迎通过工单或者其他im工具的方式联系我们,我们加以补充。
彩蛋
两个h265播放器
https://gftest-1253985742.cos.ap-guangzhou.myzijiebao.com/ffplayBin20170516.zip 此播放器直接解压即可使用
https://gftest-1253985742.cos.ap-guangzhou.myzijiebao.com/ffplay_265.exe 放到解压后的ffplay的bin目录下即可使用