【x264】整体框架汇总
- 1. x264整体框架图
- 2. 思考
参考:
x264源代码简单分析:概述
参数分析:
【x264】x264编码器参数配置
流程分析:
【x264】x264编码主流程简单分析
【x264】编码核心函数(x264_encoder_encode)的简单分析
【x264】分析模块(analyse)的简单分析—帧内预测
【x264】分析模块(analyse)的简单分析—帧间预测
【x264】码率控制模块的简单分析—宏块级码控工具Mbtree和AQ
【x264】码率控制模块的简单分析—帧级码控策略
【x264】码率控制模块的简单分析—编码主流程
【x264】lookahead模块的简单分析
【x264】变换量化模块的简单分析
【x264】熵编码模块的简单分析
1. x264整体框架图
雷霄骅博士已对x264进行了比较全面的汇总,但是由于FFmpeg版本的更新,部分的接口有所修改,部分函数实现的方式和实现的位置有所改变,这里根据自己的理解,参考雷霄骅博士做了一些汇总。主体部分可以直接参考雷博士的博客,这里做大概的汇总。主要分为几个部分:
(1)青灰色部分
以x264_为开头的函数,通常是x264对外的API接口,使用青灰色标注,例如x264_encoder_encode()
(2)红色部分
码率控制分为mb级码控和帧级码控,宏块级码控包括AQ、mbtree,帧级码控包括CQP、CRF、ABR(ABR+VBV=CBR)
(3)粉色部分
滤波分为几个子模块,环路滤波,半像素差值以及计算质量
(4)橙色部分
预测分为帧内预测和帧间预测,对16x16以及更小尺寸的宏块进行分析,从而确定最佳的预测模式,如果是帧间预测还需要确定运动矢量
(5)绿色部分
变换量化模块对预测之后获取的残差进行进一步数据量压缩,同时也会进行反变换反量化来进行帧的重建,重建帧会在后续作为参考分析的依据
(6)黄色部分
熵编码分为CAVLC和CABAC两个工具,但是通常会使用CABAC,因为其压缩效率较高,也是实际应用中常会使用的熵编码工具
本文只记录框架图,每个模块实现的细节可以参考流程分析中的各篇文章
2. 思考
在梳理了x264之后,对实际商用的编码器有了初步的框架级别的认识,但是这样的编码器在实际应用中如何修改?在整个多媒体框架链路中,编码器又是处于一个怎样的地位?FFmpeg作为一个功能强大的多媒体库,在使用编码器时,又有哪些特点?
对于一个音视频技术员来说,熟悉编码器应该说是基础,因为这是网络传输的必要前提,下一步或许可以尝试的点在于,如何结合FFmpeg实现一些视频通信的功能,只有打通采集,编码,传输,解码,播放这样一套流程,才算入门视频技术,其余的一些独特的优化,应该说是附带价值,后续再做梳理。(1)对于采集,使用何种方式获取摄像头或者桌面的数据流是关键,这其中还会涉及到和编码器对接的数据格式的问题;(2)对于传输,应当学习一些传输协议,如RTMP、RTSP等等(暂时还不是很了解),能够将各种数据类型进行至少局域网的传输;(3)对于播放,可以使用SDL组件辅助进行播放,但是可以思考一下,如果在播放的时候会遇到比如卡顿,响应很慢的情况,应该如何处理
CSDN : https://blog.csdn.net/weixin_42877471
Github : https://github.com/DoFulangChen