webRTC基础--视频编解码


视频压缩

视频编/解码其实就是一个视频压缩与解压缩的过程。原始数字视频数据量巨大,未经压缩不管是传输还是存储上都是不大现实的。

压缩原理

视频可以压缩,因为它有冗余。

  1. 空间冗余:图像相邻像素之间有较强的相关性
  2. 时间冗余:视频序列的相邻图像之间内容相似
  3. 编码冗余:不同像素值出现的概率不同
  4. 视觉冗余:人的视觉系统对某些细节不敏感
  5. 知识冗余:规律性的结构可由先验知识和背景知识得到

    编解码的技术流程和原理

    编码技术
    编解码技术

帧和场

一帧包括两场– 顶场和底场
场

逐行扫描和隔行扫描

  1. 逐行扫描表示一帧的两场在同一时间点发生,一帧即可显示一幅完整的图像
  2. 隔行扫描表示一帧的两场在不同时间点发生,即显示一幅完整的图像需要两帧

例如常说的 1080p中的p即是指 逐行扫描,而 1080i则表示隔行扫描。

I、P、B帧(预测)

常识里,1秒钟的视频应该包含24帧,否则就会出现人眼可感知的卡顿。事实上,由于图像时间、空间相邻像素具有很强的相关性,我们的视频很可能好几秒钟才会有一帧关键帧,其他的都是计算机通过 “脑补” 产生的。

  1. I帧,即关键帧
  2. P帧,前向预测帧
  3. B帧,双向预测帧

举个例子,招财猫小p总是摇着它的右手。假设关键帧为小p平举着右手,那么前一帧即是右手稍微往后靠一些。那么只要记录下两帧之间的差值,其他面面都可以通过计算得到。下一帧也同理。

帧间预测

  1. I帧图像的每个宏块都采用帧内(Intra)预测编码模式。
  2. 宏块分成8x8或者4x4块,对每个块采用帧内预测编码,称作Intra8x8或者Intra4x4。
  3. 帧内预测有多个预测方向:水平,垂直,左下,右上。
  4. 帧内预测还有直流(DC)预测。
  5. 色度块预测还有平面预测。

码率

码率表示一帧画面承载的信息数量,如1000k的码率表示一帧最大可接受1000k的信息,如果画面比较丰富,就会造成马赛克或者细节缺失。是决定视频文件和质量很关键的一个参数。

CBR 和VBR

码率控制一般分为两大类

  1. CBR:固定码率不变,画面简单的时候会造成存储浪费,画面丰富时会马赛克,图像质量不稳定但胜在cpu消耗比较 小。
  2. VBR:动态码率,会根据画面自动调整码率。图像擀量稳定,相应的cpu消耗会提升。

实际实现中还会有其他的组合,但一般都是根据CBR 、VBR作了相应的结合变动。

参考:http://www.52im.net/thread-228-1-1.html