「马赛克」被不少人称为是一种罪恶的发明,除了应用在某种不可明说的场景中,在直播过程当中的马赛克却有不少技术缘由,这篇文章将全方位为你解决直播中的「下马」问题。算法
继《直播技术详解》系列文章以后,咱们推出了这个新的系列《直播疑难杂症排查》,把解决直播问题的经验逐步分享出来,同时也会穿插一些音视频开发的基础知识和优化经验,但愿可以帮助到直播领域的开发者们。网络
本系列会涵盖的内容包括但不限于以下一些主题:ide
本文是 《直播疑难杂症排查》系列的第六篇文章,咱们重点来看看直播中常见的马赛克问题。性能
马赛克主要是指画面中出现多处相似小方块的图像,致使画面的局部或者总体看不清楚的状况优化
视频的画质,是由它的编码质量决定的,压缩得越「厉害」,画质损失就越严重,马赛克就越多。编码
哪些关键因素决定了编码器的压缩质量呢 ?3d
编码器最重要的五个参数:画质级别、码率、帧率、GOP 大小、码控方式cdn
画质级别:H.264 有四种画质级别,Baseline profile,Extended profile,Main profile,High profile。级别越高,压缩的效果越好,但算法复杂度更高,致使功耗也更高。视频
码率:决定了视频被压缩的程度,码率越低,丢失的信息也就越多,画质也就越差。可是,带来的好处是占用的网络带宽会比较小,容易在互联网上传输,不容易出现卡顿。blog
帧率:决定了视频的流畅性,帧率越高,视频越流畅,但每秒钟编码器要处理的数据量也就越大,同等码率下压缩出来的视频质量就越差。
GOP 大小:决定了视频的延时,GOP 越小,延时就越小,但 GOP 小带来的问题是关键帧数量多,数据量变大,所以,同等码率下压缩出来的视频质量就会越差。
码控方式:通常编码器都有固定码率(CBR) 和 动态码率(VBR) 两种码控方式,前者是指码率优先,为了保证码率尽量稳定,会主动下降画质,所以容易出现马赛克,后者是指画质优先,会优先保证画质,减小马赛克,但码率会浮动很大。
固然,还有一个重要的因素,就是编码器自己的实现质量,软编通常能够保证在不一样手机上效果一致,而硬编则彻底依赖手机所使用的硬件平台了。
推荐的编码器参数配置
通常直播场景中,考虑到手机性能和功耗,通常画质级别采用的是 Baseline profile,GOP 一般设置为 1~3s,帧率通常在 15~24 帧,而码率的配置,则须要根据推流的分辨率来决定,推荐的分辨率和码率配置关系以下图所示(来自:《Video Encoding Settings for H.264 Excellence》)。
总之,关于视频编码与马赛克的关系,咱们只须要记住一个原则:送入编码器的数据量越大,编码压缩得越「厉害」,丢失的图像信息也就越多,数据解码后的产生马赛克也就越「厉害」
2.图像尺寸缘由
通常摄像头采集的图像分辨率,跟最终推流的尺寸不必定彻底匹配,当摄像头采集的分辨率大于推流尺寸的时候,须要先对画面进行 「剪裁」处理,而当摄像头采集的分辨率大于推流尺寸的时候,则须要先对画面进行「拉伸」处理,而后再送入编码器中编码压缩。
例如:小尺寸的画面(好比:640 x 480),拉伸到大的尺寸(好比:1280 x 720),则很容易会产生模糊和马赛克,这样的画面再送入编码器中编码,不管怎样配置都没法再改善已经产生的马赛克了。
因此,为了下降马赛克,咱们必需要保证,摄像头采集的分辨率,必定要大于最终推流的分辨率。
3.客观条件缘由
若是主播在光线很是暗的环境下,自己送入编码器的图像质量也不会特别好,所以,同等条件下马赛克也会相对严重些。
一样,若是拍摄的是剧烈晃动的画面,剧烈变化的画面信息量也要大不少,所以,编码的复杂度会明显增大,若是要保证码率不会浮动太大,就必然要下降输出的图像质量,从而产生马赛克现象。
若是直播应用是主打这种光线暗的场景或者剧烈运动的画面场景的话,为了下降马赛克,能够考虑适当将编码参数配置得「高」 一点(好比:码率高一点,帧率低一点等等),留出充分的 「富余」空间,以抵抗环境因素带来的影响。
4.关键帧丢失
还有一种马赛克现象,是因为视频流中丢失了关键帧,致使播放器解码后花屏,从现象来看有点像马赛克,但实际上跟上面讨论的不是同一个问题,咱们将在后续的文章中专门讨论这个花屏问题。
推荐阅读:
视频直播技术详解