编解码

视频编解码

视频实际上就是一帧一帧的图片,拼接起来进行播放;标准的图像格式使用RGB三字节描述像素颜色值,会占用较大的存储空间与带宽。视频编解码器会根据前后图像的变化做运动检测,通过各种压缩把变化的结果发送到对方。

实时视频编码器需要考虑两个因素:编码计算量和码率带宽,实时视频会运行在移动端上,需要保证实时性就需要编码足够快,码率尽量小。基于这个原因现阶段一般认为H.264是最佳的实时视频编码器,而且各个移动平台也支持它的硬编码技术;譬如1080P进行过H.264编码后带宽也就在200KB/S ~ 300KB/S左右。

编码基础

总的来说,常用的编码方式分为三种:

  • 变换编码:消除图像的帧内冗余。涉及到图像学里面的两个概念:空域和频域。空域就是我们物理的图片,频域就是将物理图片根据其颜色值等映射为数字大小。而变换编码的目的是利用频域实现去相关和能量集中。常用的正交变换有离散傅里叶变换,离散余弦变换等等。
  • 运动估计和运动补偿:消除帧间冗余。视频压缩还存在时间上的关联性。例如,针对一些视频变化,背景图不变而只是图片中部分物体的移动,针对这种方式,可以只对相邻视频帧中变化的部分进行编码。
  • 熵编码:提高压缩效率,熵编码主要是针对码节长度优化实现的。原理是针对信源中出现概率大的符号赋予短码,对于概率小的符号赋予长码,然后总的来说实现平均码长的最小值。编码方式(可变字长编码)有:霍夫曼编码、算术编码、游程编码等。

I,B,P实际上是从运动补偿中引出来的,这里为了后面的方便先介绍一下。

  • I(I-frame):学名叫做: Intra-coded picture。也可以叫做独立帧。该帧是编码器随机挑选的参考图像,换句话说,一个I帧本身就是一个静态图像。它是作为B,P帧的参考点。对于它的压缩,只能使用变化编码 这两种方式进行帧内压缩。所以,它的运动学补偿基本没有。
  • P(Pframe):又叫做 Predicted picture–前向预测帧。即,他会根据前面一张图像,来进行图片间的动态压缩,它的压缩率和I帧比起来要高一些。
  • B(Bframe):又叫做 Bi-predictive picture– 双向预测。它比P帧来说,还多了后一张图像的预测,所以它的压缩率更高。

I B P 帧示意

考虑到不同帧传输的无序性,我们还需要引入PTSDTS来进行控制,使用DTS来解码,PTS来进行播放。

  • PTS(presentation time stamps):显示时间戳,显示器从接受到解码到显示的时间。
  • DTS(decoder timestamps):解码时间戳。也表示该sample在整个流中的顺序

H.26X

H.26X系列由ITU国际电传视讯联盟主导包括,H.261、H.262、H.263、H.264、H.265等:

  • H.261:主要在老的视频会议和视频电话产品中使用。
  • H.263:主要用在视频会议、视频电话和网络视频上。
  • H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。
  • H.265:高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,H.264/MPEG-4 AVC的继任者。HEVC被认为不仅提升图像质量,同时也能达到H.264/MPEG-4 AVC两倍之压缩率(等同于同样画面质量下比特率减少了50%),可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势。直至2013年,Potplayer添加了对于H.265视频的解码,尚未有大众化编码软件出现。

H.264是由ITUMPEG两个组织共同提出的标准,整个编码器包括帧内预测编码、帧间预测编码、运动估计、熵编码等过程,支持分层编码技术(SVC)。单帧720P分辨率一般PC上的平均编码延迟10毫秒左右,码率范围1200 ~ 2400kpbs,同等视频质量压缩率是MPEG42倍,H.264也提供VBR、ABR、CBR、CQ等多种编码模式,各个移动平台兼容性好。

H.264为了防止丢包和减小带宽还引入一种双向预测编码的B帧,B帧以前面的IP帧和后面的P帧为参考帧。H.264为了防止中间P帧丢失视频图像会一直错误它引入分组序列(GOP)编码,也就是隔一段时间发一个全量I帧,上一个I帧与下一个I帧之间为一个分组GOP

I B P 帧与 GOP

在实时视频当中最好不要加入B帧,因为B帧是双向预测,需要根据后面的视频帧来编码,这会增大编解码延迟。

MPGA系列

MPEG系列由ISO国际标准组织机构下属的MPEG运动图象专家组开发视频编码方面主要有:

  • MPEG-1第二部分(MPEG-1第二部分主要使用在VCD上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的VHS录像带相当。)
  • MPEG-2第二部分(MPEG-2第二部分等同于H.262,使用在DVDSVCD和大多数数字视频广播系统和有线分布系统(cable distribution systems)中。)
  • MPEG-4第二部分(MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263,它的压缩性能有所提高。)
  • MPEG-4第十部分(MPEG-4第十部分技术上和ITU-T H.264是相同的标准,有时候也被叫做“AVC”)最后这两个编码组织合作,诞生了H.264/AVC标准。ITU-T给这个标准命名为H.264,而ISO/IEC称它为MPEG-4高级视频编码(Advanced Video Coding,AVC)。

音频编码器

实时音视频除了视频编码器以外还需要音频编码器,音频编码器只需要考虑编码延迟和丢包容忍度,所以一般的MP3、AAC、OGG都不太适合作为实时音频编码器。从现在市场上来使用来看,Skype研发的Opus已经成为实时音频主流的编码器。Opus优点众多,编码计算量小、编码延迟20ms、窄带编码-silk、宽带编码器CELT、自带网络自适应编码等。

同视频编码类似,将原始的音频流按照一定的标准进行编码,上传,解码,同时在播放器里播放,当然音频也有许多编码标准,例如PCM编码,WMA编码,AAC编码等等。