本文是 《直播疑难杂症排查》系列的第六篇文章,我们重点来看看直播中常见的马赛克问题。


1. 马赛克问题的表现


马赛克主要是指画面中出现多处类似小方块的图像,导致画面的局部或者整体看不清楚的情况。


wKioL1kkH9bxiPTXAAL2W-7JzMg491.png


2. 马赛克严重的问题排查


2.1 视频编码参数配置原因


视频的画质,是由它的编码质量决定的,压缩得越 “厉害”,画质损失就越多,马赛克就越严重。


- 哪些关键因素决定了编码器的压缩质量呢 ?


编码器最重要的五个参数:画质级别、码率、帧率、GOP 大小、码控方式


画质级别:H.264 有四种画质级别,Baseline profile,Extended profile,Main profile,High profile,级别越高,压缩的效果越好,但算法复杂度更高,导致功耗也更高。


码率:决定了视频被压缩的程度,码率越低,丢失的信息也就越多,画质也就越差。但是,带来的好处是占用的网络带宽会比较小,容易在互联网上传输,不容易出现卡顿。


帧率:决定了视频的流畅性,帧率越高,视频越流畅,但每秒钟编码器要处理的数据量也就越大,同等码率下压缩出来的视频质量就越差。


GOP 大小:决定了视频的延时,GOP 越小,延时就越小,但 GOP 小带来的问题是关键帧数量多,数据量变大,因此,同等码率下压缩出来的视频质量就会越差。


码控方式:一般编码器都有固定码率(CBR) 和 动态码率(VBR) 两种码控方式,前者是指码率优先,为了保证码率尽可能稳定,会主动降低画质,因此容易出现马赛克,后者是指画质优先,会优先保证画质,减少马赛克,但码率会浮动很大。


当然,还有一个重要的因素,就是编码器本身的实现质量,软编一般可以保证在不同手机上效果一致,而硬编则完全依赖手机所使用的硬件平台了。


- 推荐的编码器参数配置


一般直播场景中,考虑到手机性能和功耗,一般画质级别采用的是 Baseline profile,GOP 通常设置为 1~3s,帧率一般在 15~24 帧,而码率的配置,则需要根据推流的分辨率来决定,推荐的分辨率和码率配置关系如下图所示(来自:《Video Encoding Settings for H.264 Excellence》):


wKioL1kkH_2xSDg5AAGf2s2OelU644.png

总之,关于视频编码与马赛克的关系,我们只需要记住一个原则:送入编码器的数据量越大,编码压缩得越 “厉害”,丢失的图像信息也就越多,数据解码后的产生马赛克也就越 “厉害”。


2.2 图像尺寸原因


一般摄像头采集的图像分辨率,跟最终推流的尺寸不一定完全匹配,当摄像头采集的分辨率大于推流尺寸的时候,需要先对画面进行 “剪裁” 处理,而当摄像头采集的分辨率大于推流尺寸的时候,则需要先对画面进行 “拉伸” 处理,然后再送入编码器中编码压缩。


wKioL1kkIBniUvc4AABRb5s_uDE464.png

例如:小尺寸的画面(比如:640 x 480),拉伸到大的尺寸(比如:1280 x 720),则很容易会产生模糊和马赛克,这样的画面再送入编码器中编码,无论怎样配置都无法再改善已经产生的马赛克了。


所以,为了降低马赛克,我们必须要保证,摄像头采集的分辨率,一定要大于最终推流的分辨率。


2.3 客观条件原因


如果主播在光线非常暗的环境下,本身送入编码器的图像质量也不会特别好,因此,同等条件下马赛克也会相对严重些。


同样,如果拍摄的是剧烈晃动的画面,剧烈变化的画面信息量也要大很多,因此,编码的复杂度会明显增大,如果要保证码率不会浮动太大,就必然要降低输出的图像质量,从而产生马赛克现象。


如果直播应用是主打这种光线暗的场景或者剧烈运动的画面场景的话,为了降低马赛克,可以考虑适当将编码参数配置得 “高” 一点(比如:码率高一点,帧率低一点等等),留出充分的 “富余” 空间,以抵抗环境因素带来的影响。


2.4 关键帧丢失


还有一种马赛克现象,是由于视频流中丢失了关键帧,导致播放器解码后花屏,从现象来看有点像马赛克,但实际上跟上面讨论的不是同一个问题,我们将在后续的文章中专门讨论这个花屏问题。


3. 小结


关于直播马赛克严重的问题排查大致就介绍道这里了,有任何疑问欢迎来信 lujun.hust@gmail.com 交流,另外,欢迎关注我的新浪微博 @卢_俊 或者 微信公众号 @Jhuster 获取最新的文章和资讯。


wKiom1kkID-SaMu4AAAfD7Y8yQU973.jpg