网络在线直播技术揭秘(一):编码与压缩算法

大概六七年前,Web端就有直播产品。当然还是IE浏览器横行的时代,需要开发ActiveX控件,这个东西是非IE不可,后来开始使用Flash做为前端兼容,服务器端使用Adobe Flash Media Server 或 Real Live Stream Server。直播产品主要的运营方式有歌唱,会议、讲课,靠送花、广告等赢利。但是因为当时带宽、技术等因素,暂未能大规模爆发。


随着移动互联网与4G网络的普及,更多的人开始从手机开始接触互联网,各种资讯APP和电商平台,越发离不开互联网,又加很多非直播为主业的产品也开始加入了直播功能,各种因素形成了当今的直播大潮。




扩展名那点事儿


我想大概人人都喜欢看电影,特别是技术人员。我们的硬盘里会保存着各种格式的视频,总结一下,有.wmv,.avi,.divx,.flv,.mp4,.mov,.mkv,.rmvb,.ogg,.webm等文件格式。你也可能还会发现其它的扩展名。


看了这么多,你可能会感觉原来视频有这么多种类型。其实不然,这些格式看起来挺多,实际是一个封装好的容器(container format),里面包裹着不同的轨道。我们单纯看扩展名,是还不知道里面的“轨道“(即编码标准)长什么样的。


接下来我们就一起详细谈谈这些“轨道”。


视频压缩技术


网络在线直播技术揭秘(一):编码与压缩算法_第1张图片

从静态照片到动态摄像,技术在不断改变世界。这些产品由模仿人类的眼睛,到超过人类的眼睛,成像精度越来越高。


比如一部动画片,从画一幅画,到连续的24帧/秒(24/fps- frames per second)成为一个动态画面。


从技术上讲,从模拟技术到数字技术,由CMOS到CCD成像。因为视频在未经压缩前会占用大量的数据空间。从设备到存储都异常昂贵,只有某个电影厂、电视台才能配置


因此,在没有大规模数字化之前,存储在磁带的介质都是非常昂贵的。在我们看到的二战前后的电影,能够保存下来的从内容和精神都异常可贵的产品。

 

如今,到人们人人都能手机拍照片和摄像。我们手里的手机也是步步的升级摄像头的像素,但是苹果们却的存储容量,却是从16G缓缓的向上升级。iPhone 7来了,随着容量的不同,差的价格却不是一般的高。我们还是需要琢磨一下怎么节省存储。即使服务器端,无论是点播还是直播,都需要先存在服务器或CDN端。

 

iPhone 7视频拍摄支持4k/30fps、1080p/60fps、720p/30fps的标准视频和1080p/120fps、720p/240fps的慢动作视频。

  

我们对视频压缩的目的是减少存储数量,同时保证视频质量。主要包括如下方法:

 

  • 实时与非实时

  • 对称与不对称

  • 压缩比

  • 无损与有损压缩

  • 帧间帧内对比

  • 码率控制

 

视频从系统捕获,到压缩到磁盘,解压缩和播放视频(每秒30帧)所有为实时,没有延迟,比如YY直播等为此技术。还有一些是“伪”直播,是将能够捕捉一些视频压缩处理,再通过CDN等回放给用户,会有几十秒的延迟,市面上很多系统均为此种技术。

 

当视频为60帧时,画面会比较流畅,当视频每秒30帧时就只能回放一部分画面,但对于人眼来说并不明显。


但帧速率一旦不足就会让人感觉到卡顿。比如一个每秒24帧的视频将明显生涩。此外,丢掉的帧应包括极其重要同步数据。比如一个人的嘴唇动作是由于缺少捕获或回放丢帧,就不能正确地匹配音频。

 

下面来看不同分辨率原始视频所占用的空间:1280*720*1.5*8 bit = 10.55M。1080P(分辨率为1920*1080) 1920*1080*1.5*8 bit = 23.73M。要知道这只是一副画面的大小,流畅的视频画面需要大概每秒25帧或以上,也就是说高清720p的视频,原始数据大小为每秒10.55*25 = 263.75M,而1080P每秒数据量为23.73M*25 = 593.25M,暂时不算4K视频。这里还都只是算的每秒原始视频数据的数据量,大家再想想,随便一部高清电影,怎么也得有两个多小时,原始数据量就是再乘3600秒*2。因此高清视频需要大量的存储和带宽。

  

压缩视频的核心目标,主要是压缩每帧与一组帧的空间占用率。不同的分辨率,压缩后的尺寸有什么不同?来看如下表格:

 

应用场景

数据速率

压缩前

压缩后

视频会议

352*240 (15fps)

30.4 Mbps

64-768 Kbps

CD-ROM 数字视频

352*240 (30fps)

60.8 Mbps

1.5 _ 4 Mbps

广播视频

720*480 @30fps

248.8 Mbps

3-8Mbps

高清视频

1080*720 @60fps

1.3 Gbps

20Mbps

  

视频压缩标准

 

网络在线直播技术揭秘(一):编码与压缩算法_第2张图片

我们再看如下表格:

 

标准

应用领域

比特率

H.261

视频会议和电话会议标准(ISDN)

p x 64 kb/s

MPEG-1

数据存储媒体(CD-ROM品质)

1.5 Mb/s

MPEG-2

数字电话

> 2 Mb/s

H.263

PSTN网络低码率视频

< 33.6 kb/s

MPEG-4

基于对象的编码,内容合成,互动

Variable

变化的内容

H.264

从低比特率编码,高清编码,HD-DVD,监控,视频会议。 (改进的视频压缩)

10到 100 kb/s

 

我们根据上面表格中所列视频压缩标准格式做较具体的说明。

  

MPEG是Moving Picture Experts Group的缩写。与TCP/IP等一样,用来定义视频压缩的标准。

 

  • MPEG-1(1991年发布)

目标是压缩的数字存储介质光盘,达到VHS质量的视频在~ 1.5 MB /秒

帧速率锁定在25(PAL)和30(NTSC)FPS FPS分别编码和解码的低计算时间

  • MPEG-2(1993年发布)

它是MPEG-1的超集,支持更高的比特率,更高的分辨率,和隔行扫描的图片

原来的目标是支持隔行扫描视频到传统的电视机,最终扩展到支持高清电视(HDTV)。

还有一些比MPEG-1多的一些扩展,能够在不同的分辨率和帧速率播放相同的视频。

  • MPEG-4(1998年发布)

大家也许留意到了,没有写MPEG-3,此版本为较小的变化,可以称为过渡版本。

MPEG-4标准主要是扩展新的功能,而不是实现更好的压缩。从低比特率(10kb/s到1Mb/s)以获得良好的质量。如下:

  1. 基于对象或基于内容的表示

  2. 单独的视觉对象的独立编码

  3. 基于内容的访问和操作

  4. 天然与合成物的整合

  5. 交互性-多媒体应用和视频通信

  6. 容易出错的环境的通信

  7. 包括从早期的标准的基于帧的编码技术

 

MPEG压缩算法编码数据的5个步骤,概要如下:

步骤1:减少分辨率

步骤2:运动评估

步骤3:离散余弦变换(DCT)

步骤4:量化

步骤5:熵编码

 

人眼对颜色信息的敏感性比暗明亮的对比度低。从RGB色彩空间转换成YUV颜色成分有助于利用这种效应压缩


由于视频序列连续两帧的差异很小(除了场景发生变化),MPEG提供了一条途径,减少时间冗余度。包括以下几种类型:

  • I帧(帧内编码),独立于所有其他帧

  • P帧(预测),编码基于先前编码帧

    B帧是P帧的双向版本。参照两个方向:一个前帧和一个后帧。

  • B帧(双向),编码基于以前和将来的编码帧比较

  • 帧内编码,没有其他框架的参考,压缩比不那么高


  • H.264


H.264是最早用于安防行业的压缩技术。 它实际上是MPEG-4标准的一个变型,通常称为MPEG-4第10部分高级视频编码(AVC)。


它使用的I,P和B帧相同的基本概念,对视频编码,但依赖于更高级的编码技术。一个例子是使用运动向量的视频压缩到一个较小的尺寸的运动补偿。H.264 为了防止中间 P 帧丢失视频图像会一直错误它引入分组序列(GOP)编码,也就是隔一段时间发一个全量 I 帧,上一个 I 帧与下一个 I 帧之间为一个分组 GOP。从而防止丢包和减小带宽还引入一种双向预测编码的 B 帧,B 帧以前面的 I 或 P 帧和后面的 P 帧为参考帧。


网络在线直播技术揭秘(一):编码与压缩算法_第3张图片


小结


本篇为大家介绍了视频压缩编码的原理。从未来角度来讲,当带宽越来越不是问题后,压缩算法的主要在视频冗余上下的功能会较多。

 

在目前的视频直播上来讲,主要是应用在手机屏幕的尺寸,基本在400*700px的分辨率左右,清晰度只适配手机显示。很多直播应用每月的在线容量的提升,导至广播的视频开销极大,甚至每月上亿的成本。目前对于互联网公司的最痛点,仍是带宽的问题,那么视频压缩功能更显重要。

整理:汽车锁干扰器 www.xmqisheng.com


下一篇我们会逐步铺开,敬请期待。

你可能感兴趣的:(编程)