1 Android音视频开发,android驱动开发权威指南pdf

除了I/P/B帧外 , 还有图像序列GOP 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--24)(%/2/w/1240)]
【1Android音视频开发,android驱动开发权威指南pdf】下面我们就来详细描述一下H264压缩技术 。
H264压缩技术
H264的基本原理其实非常简单 , 下我们就简单的描述一下H264压缩数据的过程 。通过摄像头采集到的视频帧(按每秒 30 帧算) , 被送到 H264 编码器的缓冲区中 。编码器先要为每一幅图片划分宏块 。
以下面这张图为例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--26)(%/2/w/1240)]
划分宏块
H264默认是使用 16X16 大小的区域作为一个宏块 , 也可以划分成 8X8 大小 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--29)(%/2/w/1240)]
划分好宏块后 , 计算宏块的象素值 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--33)(%/2/w/1240)]
以此类推 , 计算一幅图像中每个宏块的像素值 , 所有宏块都处理完后如下面的样子 。
划分子块
H264对比较平坦的图像使用 16X16 大小的宏块 。但为了更高的压缩率 , 还可以在 16X16 的宏块上更划分出更小的子块 。子块的大小可以是 8X16? 16X8? 8X8? 4X8? 8X4? 4X4非常的灵活 。
上幅图中 , 红框内的 16X16 宏块中大部分是蓝色背景 , 而三只鹰的部分图像被划在了该宏块内 , 为了更好的处理三只鹰的部分图像 , H264就在 16X16 的宏块内又划分出了多个子块 。
这样再经过帧内压缩 , 可以得到更高效的数据 。下图是分别使用mpeg-2和H264对上面宏块进行压缩后的结果 。其中左半部分为MPEG-2子块划分后压缩的结果 , 右半部分为H264的子块划压缩后的结果 , 可以看出H264的划分方法更具优势 。
宏块划分好后 , 就可以对H264编码器缓存中的所有