关于三种profile的解释
从应用角度看,H.264有三个层次,分为主要用于电视会议等通信的基本层次,面向高画质用途和录像的主层次以及面向内容配送的扩展层次。各层次的清晰度和编码速度取值不同。
基本层次(baseline profile)的主要技术为图像只含有I帧,P帧,支持帧内和帧间编码,系统内有环路滤波,1/4帧间预测,4:2:0 YUV格式输入,基于VLC的纠错编码(CAVLC),弹性宏块指令等。主要用于可视电话、会议电话,无线通信等实时性强的视频通信。
主要层次(main profile)则支持隔行视频,在基本层次基础上加入了CABAC运算编码技术和基于双向预测的B帧,滤波(接口)等技术,但不含弹性宏块指令。主要用于数字广播电视和数字视频存储。
扩展层次(extended profile)则在基线层次里加入B帧和滤波编码等,支持码流之间的切换(SP slice, SI slice)、改进误码性能,但不支持隔行视频和CABAC。主要应用于流媒体。
理论上Profile级别越高,表示采样精度越高,也就是视频越清晰。但有个前提就是,Profile级别高低和你要观看的载体有关系,相对来说在越是在大屏幕上观看,那所需要Profile级别也应相对应的提高,但与此同时带来的副作用就是你所观看视频的硬件环境也要提高。换句话说,Profile3.1对于IPAD足够用了,级别在高的话其视频观看效果质量也不会有明显提高。
还有重要一点,Profile的结果好还和片源的质量有直接关系,片源质量差,多高的Profile也没用。
T264
l T264对main profile的支持?
在T264中判断是否编码为main还是baseline,利用了如下代码。t->param.cabac 和t->param.b_num均从编码配置文件中获取。
if( t->param.cabac || t->param.b_num > 0 )
seq->profile_idc = 77;(main)
else
seq->profile_idc = 66;(baseline)
在修改了成1 # CABAC 或者 1 # b frame number between 2 p-frame(0, 1, 2),编码出main profile标准的压缩文件,解码也顺利完成。可以证明T264是支持main profile的。
l T264解码器对JM86、X264和FFMPEG的支持?
测试一
测试文件:foreman_part_qcif.yuv
编 码:JM86
编码格式:baseline profile 3.0
压缩文件:test.264
解 码:T264
现 象:程序崩溃
测试二:
测试文件:foreman_part_qcif.yuv
编 码:JM86
编码格式:main profile 3.0
压缩文件:test.264
解 码:T264
现 象:程序崩溃
测试三
测试文件:foreman_part_qcif.yuv
编 码:X264
编码格式:main profile 5.1
压缩文件:test.264
解 码:T264
现 象:程序崩溃
暂时还没找到怎么配置X264的编码,只编出了main profile格式的。
FFMPEG只有解码器,所以只测试X264和JM86。
可以看到,T264解码器不支持JM86和X264。
X264
暂时只看到编码部分。
FFMPEG
测试四
测试文件:foreman_part_qcif.yuv
编 码:T264
编码格式:baseline profile 3.0
压缩文件:test.264
解 码:FFMPEG
现 象:解码成功
测试五
测试文件:foreman_part_qcif.yuv
编 码:T264
编码格式:main profile 3.0
压缩文件:test.264
解 码:FFMPEG
现 象:解码成功
测试六
测试文件:foreman_part_qcif.yuv
编 码:X264
编码格式:main profile 5.1
压缩文件:test.264
解 码:FFMPEG
现 象:解码成功
测试七
测试文件:foreman_part_qcif.yuv
编 码:JM86
编码格式:main profile 3.0
压缩文件:test.264
解 码:FFMPEG
现 象:解码成功
综上所述,FFMPEG对于X264、T264和JM86编码格式的文件均可解码。解码器建议采用FFMPEG。
对于JM86,实用性太差,不在考虑范围内。