移动设备上的H.264实时视频编码,需要考虑到cpu占用与带宽这2个限制因素,使用X264软编码,开启neon指令集优化,即使是在arm处理器下,依然可以通过优化配置达到满意的性能.
以下测试环境 一段352×288@15fps的视频,模拟摄像头采集到的数据。ipod touch4 和昨天编译出的X264:
Touch-future:~ root# ./x264 -o video_1.h264 video_1.y4m –profile baseline –preset ultrafast –fps 15
baseline
ultrafast
encoded 467 frames, 48.17 fps, 865.45 kb/s 3368054(压缩后的文件大小,单位字节)
superfast
encoded 467 frames, 39.33 fps, 640.36 kb/s 2492070
veryfast
encoded 467 frames, 28.43 fps, 535.28 kb/s 2083132
fast
encoded 467 frames, 10.41 fps, 542.16 kb/s 2109913
main
ultrafast
encoded 467 frames, 42.79 fps, 865.45 kb/s 3368054 B-frames: 0% (ultrafast 下不支持b帧编码)
superfast
encoded 467 frames, 31.94 fps, 608.48 kb/s 2367992 B-frames: 32.3%
veryfast main
encoded 467 frames, 22.88 fps, 480.83 kb/s 1871246 B-frames: 34.9%
使用main profile, 增加B帧的支持并没有显著的减少码流,同时性能损失也比较明显,
取一个superfast main 编码后的文件读取信息看看
Encoding settings : cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x1:0x1 / me=dia / subme=1 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=1 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=1 / keyint=250 / keyint_min=15 / scenecut=40 / intra_refresh=0 / rc=crf / mbtree=0 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00
1
Encodingsettings:cabac=1/ref=1/deblock=1:0:0/analyse=0x1:0x1/me=dia/subme=1/psy=1/psy_rd=1.00:0.00/mixed_ref=0/me_range=16/chroma_me=1/trellis=0/8x8dct=0/cqm=0/deadzone=21,11/fast_pskip=1/chroma_qp_offset=0/threads=1/lookahead_threads=1/sliced_threads=0/nr=0/decimate=1/interlaced=0/bluray_compat=0/constrained_intra=0/bframes=3/b_pyramid=2/b_adapt=1/b_bias=0/direct=1/weightb=1/open_gop=0/weightp=1/keyint=250/keyint_min=15/scenecut=40/intra_refresh=0/rc=crf/mbtree=0/crf=23.0/qcomp=0.60/qpmin=0/qpmax=69/qpstep=4/ip_ratio=1.40/pb_ratio=1.30/aq=1:1.00
可以看出,x264默认是使用”crf”压缩算法,质量为23. 作为默认值,一般代表了编码速度,画质与码流的均衡.
而我们移动设备实时视频编码应用的场景,更多侧重于优化编码速度与码流上.
ultrafast baseline crf 28
encoded 467 frames, 58.94 fps, 515.58 kb/s 2006474
superfast baseline crf 26
encoded 467 frames, 41.73 fps, 460.02 kb/s 1790244
superfast baseline crf 28
encoded 467 frames, 43.64 fps, 366.28 kb/s 1425436
如何取舍,就看各位的需求啦.
用到的样例文件及编码后的文件,点此下载