为何大多数视频采用 H264 编码
因为免费,没有专利费用,而 H265 VP9 需要专利费用。(8K电影 是 H265 和 VP9 的)
注意:
无论是 H264 还是 H265 VP9 都是基于 宏块 的方式进行编码, 原理都是一样的, 但是 实现的算法不一样
何为 宏块 的编码?
个人理解 : 将视频的每一帧 进行分块,
- 1、H264 默认使用 16 X16 的大小区域 作为一个 块,将一帧 分成多个视频 块 (也有8X8 16X8 的)
如果这一帧 的 图片 颜色有不同的边界,就会划分成 8X8 的,这样分的 更细节一些 - 2、如果划分成 16 X16 的块。他并不会保存 所有 256 个像素,而是记录 顶部 16 个 和左侧 16个像素在减去左上角的点的记录了2次的像素一共 31 个, 同时也会记录颜色渐变的方向 。在通过颜色渐变的 把 16 X16 给填满。
- 3、
1、android 中的解码
软解码
通过 集成 ffmpeg 。对视频进行解码,属于软解码,依赖CPU的计算,内存、CPU占用高,高清视频容易卡顿。
但是不依赖于视频的格式。
硬解码
由显卡核心GPU来对高清视频进行解码工作,CPU占用率很低,画质效果比软解码略差一点,需要对播放器进行设置。 (一般使用 DSP 的 芯片 进行 解码,同时他也做 编码 的工作)
在 Android 中 使用 MediaCodec 进行的是 硬解码
下图展示的 是 DSP 的 编解码 控制过程

其中的 视频信源编码器 就是将 视频帧 实现 块结构
其中 传输缓冲器 还起到一个 校验 的作用,是否符合规则,
2、视频信源编码器

上图是视频信源编码器 的流程图
- a、图像输入的时候会先 判断 是 帧内 还是 帧间。其中所有的视频的第一帧都是 帧内 的方式, 属于关键帧
当视频场景切换的时候,还会出现 一个 关键帧 - b、量化器做的工作是 每一帧的块 运动的方向 视频在改变,其实是 每一帧的块 在改变或者在运动
- c、环路滤波器,就是把高频的过滤掉, 因为人眼也就只能分辨 60Hz
网友评论