一、基本概念

协议

协议一般有 HTTP 、RTSP、RTMP 等,我们就最常见的就是 HTTP 网络协议,而 RTSP 和 RTMP 一般用于直播流或支持带有控制信令的常见,比如远程监控。

视频封装协议

视频封装协议指的是我们常见的 MP4 、AVI 、RMVB 、MKV、TS、FLV、MOV等常见后缀格式,它们所表示的就是多媒体的封装协议,就是在传输过程中把音频和视频打包都一起的封装,所以播放前是需要把这部分内容解开,提取出对应音频编码和视频编码。

音频编码

  • 音频编码指的是音频数据的编码方式,常见的如:MP3、 PCM、WAV、AAC、AC-3 等,因为音频的原始数据大小一般不适合直接传入,比如原始大小一般可以按照采样率 * 声道数 * 样本格式 去计算
  • WAV/PCM 编码的音频质量比较好,但是体积会比较大;MP3 有损压缩能在音频质量还可以的情况下压缩音频的体积;AAC 也是有损压缩,但是又有分有 LC-AAC、HE-AAC等。

视频编码

  • 视频编码指的就是画面图像的编码压缩方式,一般有 H263、H264、HEVC(H265)、MPEG-2 、MPEG-4 等,其中H264 是目前比较常见的编码方式。
  • 通常情况下我们理解的画面是 RGB 组合出来,而目前视频领域可能更多使用 YUV 格式,其中 Y 表示的是亮度(灰度),而 U 和 V表示的是色度(饱和度)。
  • YUV 是对 RGB 的特殊处理和叠加来获取颜色,比如 YUV420 可以理解对色度以 2:1 的抽样率进行存储,然后亮度透过色度来显示画面

视频压缩里,又有几个概念

IPB 帧

IPB 帧是一种常见的帧压缩方法,其中 I 帧属于关键帧是每个画面的参考帧;P 帧是前向预测帧;B 帧是双向预测帧。简单来说就是 I 帧自己就可以得到一个完整画面,而 P 帧需要前面的 I 帧或者 P 帧来帮助解码得到一个完整画面,而 B 帧则需要前面的 I/P 帧或者后面的 P 帧来协助形成一个画面。

所以 I 帧是很关键的存在,压缩 I 帧就可以很容易压制掉空间的大小,而压缩 P/B 帧可以压缩掉时间上的冗余信息 。所以在视频 seek 的时候,I 帧很关键,如果视频 seek 之后发生往前的跳动,那很可能就是你的视频压缩得太厉害了。

IDR 帧的概念

因为 H264 采用的是多帧预测,导致 I 帧不能作为独立的观察条件,所以多出一个叫 IDR 帧的特殊 I 帧用于参考,IDR 帧最关键的概念就是:在解码器过程中一旦收到 IDR 帧,就会立即清空参考帧缓冲区,并将IDR帧作为被参考帧。

DTS 和 PTS

在视频解码里还有一个叫 DTS(Decoding Time Stamp) 和 PTS(Presentation Time Stamp)的存在,DTS主要用于视频的解码,PTS主要用于在解码阶段对视频进行同步和输出

因为视频包里面数据解码不是连续的,而是需要通过解码数据源得到的 DTS,才能 决定了包应该在什么时候被解码,而得到的PTS 决定了解码后的图片什么时候被绘制。

GOP(Group Of Picture)

GOP(Group Of Picture)就是两个 I 帧之间的距离,一般 GOP 设置得越大,画面的效果就会越好,到那时需要解码的时间就会越长。 所以如果码率固定而 GOP 值越大,P/B帧 数量会越多,画面质量就会越高。

参考

  • GSYVideoPlayer
  • 音视频基础