如今手机已成为人们生活中不可或缺的一部分,而手机中的视频播放更是人们日常娱乐中的一大活动。然而有时在观看视频的过程中,会遇到视频卡顿、花屏、甚至黑屏的问题。这些问题对于观看体验产生了极大的影响,让原本想要享受视频带来的乐趣变成了糟糕的体验。那么我们该如何解决这些问题,达到良好的观看体验呢?下面本文将为大家介绍几种常见的解决方法。
如何解决播放视频卡顿、花屏、黑屏问题
今天就说下视频开发工作中,最怕听到的那句话。
“视频怎么黑屏了?“
“视频怎么这么卡?“
“视频中间偶尔会有花屏啊。“
“视频怎么感觉有延时?“
今天就来说一说,视频黑屏怎么办,视频花屏怎么办,视频为什么会黑屏和花屏。
纯理论知识,没有编码,以下主要针对Android平台直播中的问题。
视频播放黑屏怎么办?按照黑屏时间点分,我分为视频开始播放时候黑屏和视频播放中途黑屏两种,下面说一说两种情况下的区别。
视频开始播放时候黑屏大家都用过许多平台的视频软件,比如腾讯视频、爱奇艺等等。有没有注意到一个问题,大多数视频背景色是黑色的,(当然也有喜欢使用占位图的,比如知乎,视频播放时候背景就是默认视频的第一帧),跟刚才的黑屏联系起来,许多读者都能想到,本来就是黑色,那黑屏是不是就发现不了,这属于用户无感知的黑屏。
为什么视频开始播放时候会出现黑屏呢?
我们根据视频播放流程分析一下
在线视频播放流程从上图我们可以看到,
当用户按下手指,到视频正式开始加载出来,需要经历app端发送请求、准备解码器、云端响应返回数据、然后拿到数据之后,解码器进行解码,再显示到数据上。
经历这么多步骤后,视频才会被渲染到视图上。展示到用户之前,那么必然在图像渲染到视图上之前,会有空白时间。
Android平台一般都是渲染到surfaceView或者TextureView上,二者都是透明色。如果只有视图以外的部分不是黑色,或者说视图有遮挡幕布的情况下,占位图的隐藏时间就尤为重要,必须在视频渲染到视图上之后,才可以隐藏掉幕布。
对于Android来说,TextureView在绘制图像的时候可以回调事件,这样我就能知道什么时候,视频在绘制到视图上。但是回调的是正在绘制,和实际显示会有差异,需要延时隐藏掉幕布。
视频播放中途黑屏(这里讨论偶尔黑屏然后自动恢复的情况)视频播放中途出现黑屏是最让人头疼的,很多时候用户反馈的都是某刻发现黑屏问题,没有日志,没有截图,只有一句话。
我们可以推断一下,视频黑屏的问题有哪些呢?
上一帧图像已经渲染到视图上,突然变成了黑色。说明这个时候视图已经在渲染新一帧图像,不然会保持上一帧图像状态,基于这个推论,可以得出,下一帧图像数据是有问题的(区别于花屏的数据问题),这个时候要确认一下视频帧数据、解码器状态是否正常。
具体视频数据异常方面没有做仔细研究,在此不多说。
视频播放时候为什么会花屏?我有一遍文章讲到GOP和帧率和码率的关系,讲到视频帧是一张张图像压缩而来的。
看这里
花屏的根本原因就是视频帧还原时候,不能正常还原,导致局部区域出现马赛克重影等问题(不考虑因为码率限制或者硬件限制导致分辨率不够的局部马赛克现象)。
上文我们讲过,在直播中,视频流I帧等同于IDR帧,也就是说I帧到下一个I帧的开始就是一个GOP,这个GOP如果是完整的,那么在这个GOP播放中,视频就不会出现花屏的情况。
看下图
直播情况下参考帧示例2-8号P帧依此以前面的帧作为参考帧进行压缩,同样,解码时候,也需要参考前面的帧进行解码,这样才能还原出图像。
1号I帧丢失会怎么样,是不是后面的P帧都会出现花屏的情况?
同样,如果2号帧如果丢失,3号帧也会出现花屏问题,后续视频帧都会有花屏问题,直到9号帧,它可以直接参考1号I帧解码。
尤其是现在的移动网络直播中,因为网络的不稳定,丢帧的情况时有发生,为了避免花屏,我们就需要把丢失参考帧的视频丢掉,这就会导致视频出现卡顿的问题。
视频为什么会卡顿?上面说花屏的时候说了一部分,把之后的视频数据丢掉,播放器没法渲染新的数据,视频就会有卡顿的感觉。
如果觉得我写的对你帮助,请点个赞支持一下。
个人见解,欢迎一起讨论。
遇到手机视频出现卡顿、花屏、黑屏等问题时,我们首先可以尝试重新启动设备、清理缓存、检查网络等基本操作,如果问题仍然存在,就需要考虑更换手机或更换视频播放器等措施。保持手机系统干净整洁,及时升级软件,也能有效避免出现类似问题。