libx264 编码参数调整--流媒体

本文探讨了Libx264在流媒体场景下的应用,特别是针对低延时编码的需求。通过调整参数如禁用B帧、设置GOP值及采用ultrafast预设等,实现了逐帧编码输出,满足实时性要求。实验环境下,每帧编码时间在4ms以内。

在标题加了个后缀-流媒体。所以主要是借libx264来研究一下其中关于在流媒体场景中(低延时)偏向的设置, 关于编码器 码率,图像效果等等这里面有好多参数,指不定有相互影响的参数,理解的不多,这里借鉴各处博客以及x264官方wiki和libx264源码,官方网站https://www.videolan.org/developers/x264.html (vlc 一家组织,去vlc官网即可,还可以找到wiki文档))记录下试水libx264-流媒体低延时编码的参数设置
环境:
        5代corei7 cpu ,ubuntu 系统。
        libx264  配置 --disable-asm 关闭,这个可能会降低效率,实际使用需要开启,这里只是研究测试。
libx264 ,configure + make 之后默认生成x264可执行文件,不过我们这里并不打算使用x264工具来研究,其源码目录下有一个 example.c 文件,可以作为api 调用的参考。需要我们 执行
#make example
生成example 可执行文件,本片参考这个example 源码来写自己的demo, 
1.0 设置参数。 2.0 输入一帧yuv420数据。 3.0 编码取出数据

Q1: 怎么设置编码器让其不生成B帧?

param.i_bframe=0 //  /* how many b-frame between 2 references pictures */ 源码注释

Q2:怎么设置GOP值

param.i_keyint_max=xx /* Force an IDR keyframe at this interval */

Q3:在每一个I帧前面加上sps pps信息

param.b_repeat_headers=1 /* put SPS/PPS before each keyframe */

Q4:关键点,怎么让编码器不缓存,期望它是送入一帧数据,编码完就出一帧数据?

x264_param_default_preset( &param, "ultrafast", "zerolatency" )
第二个参数,zerolatency。 设置为这个之后,就是进一帧出一帧的顺序了。在编码存储本地文件的时候可能不需要这么做,但是事实性要求高的肯定要这么设置了,不然始终有delay。
第一个参数,实际上设置的是包含一系列参数的设置组合,根据你选择的速度来帮忙设置一些列参数,比如上面的param.i_bframe在选择 ultrafast的时候就会被设置为0,在源码 base.c ::param_apply_preset( x264_param_t *param, const char *preset ) 函数中可以看到详细信息,可选的值:{"ultrafast","superfast","veryfast","faster","fast","medium","slow","slower","veryslow","placebo"}
看名字也就知道意思了。
不禁想到 android 的平台硬编码器,me

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值