ffmpeg推流 av_dict_set 参数设置解析(降低延时、处理花屏、改善画面质量)(实时更新)

一、关于影响时延的参数设置

1.preset :指定编码的配置。x264编码算法有很多可供配置的参数,不同的参数值会导致编码的速度大相径庭,甚至可能影响质量。为了免去用户了解算法,然后手工配置参数的麻烦。x264提供了一些预设值,而这些预设值可以通过preset指定。这些预设值有包括:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。ultrafast编码速度最快,但压缩率低,生成的文件更大,placebo则正好相反。x264所取的默认值为medium。需要说明的是,preset主要是影响编码的速度,并不会很大的影响编码出来的结果的质量。压缩高清电影时,我一般用slow或者slower,当你的机器性能很好时也可以使用veryslow,不过一般并不会带来很大的好处。
例:av_dict_set(&param, "preset", "ultrafast", 0);

2.muxdelay || max_delay:设置延迟约束,muxdelay以秒为单位设置延迟,而max_delay以微秒为单位设置延迟。最终结果是相同的。
例:av_dict_set(&param, "muxdelay", "1", 0);

3.zerolatency:转码延迟,以牺牲视频质量减少时延
例:av_dict_set(&param, "tune", "zerolatency", 0)

二、关于影响视频质量的参数设置

1.crf:这是最重要的一个选项,用于指定输出视频的质量,取值范围是0-51,默认值为23,数字越小输出视频的质量越高。这个选项会直接影响到输出视频的码率。一般来说,压制480p我会用20左右,压制720p我会用16-18,1080p我会用12。最好的办法是大家可以多尝试几个值,每个都压几分钟,看看最后的输出质量和文件大小,自己再按需选择。
该方法与设置编码器的bit_rate的效果是一样的。
例:av_dict_set(&param, "crf", "18", 0);

2.profile
H.264有四种画质级别,分别是baseline, extended, main, high:
(1)Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
(2)Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
(3)Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAVLC 和CABAC 的支持;
(4)High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;

H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。 根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。
在这里插入图片描述
3.level
level越高视频质量也就越高
例:av_dict_set(&param, "level", "4",0);

在这里插入图片描述

三、其他:

1.buffer_size:减少卡顿或者花屏现象,相当于增加或扩大了缓冲区,给予编码和发送足够的时间。
例:av_dict_set(&param, "buffer_size", "1024000", 0);

2.rtsp_transport:修改优先连接发送方式,可以用udp、tcp、rtp
例:av_dict_set(&param, "rtsp_transport", "udp", 0);

3.stimeout:设置超时断开,在进行连接时是阻塞状态,若没有设置超时断开则会一直去阻塞获取数据,单位是微秒。
例:av_dict_set(&param, "stimeout", "5000000", 0);

4.movflags :加入mp4头。
例:av_dict_set(&param, “movflags”, “empty_moov+default_base_moof+faststart”, 0);

5.frag_duration:设定mp4容器大小
例:av_dict_set_int(&param, “frag_duration”, 100 * 1000, 0);

注:延迟时间和视频质量一直是一个成反比例的两个参数,牺牲时间还是牺牲质量是在每一个项目中需要根据实际需求去探讨和调整的,但是我们需要做的不仅是对于延迟时间和视频质量比例的调整,更多的还是要利用所拥有的资源去在规定延迟时间内发挥出最好的视频质量。

  • 11
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值