其它 · 2022-02-09

FFmpeg RTP 100ms如下超低音频流推送设置

视频+音频

首先安装好FFmpeg,而后能够用如下命令测试,咱们转发服务器用的是janus,也能够用其余vlc等。缓存

ffmpeg  -re -i C:\Users\rong\Videos\xxx.mp4 -an -vcodec copy -vcodec hevc -f rtp rtp://10.33.250.241:8004 -vn -acodec copy -acodec opus -strict -2 -f rtp rtp://10.33.250.241:8002

音频推流

ffmpeg  -re -i C:\Users\rong\Videos\xxx.mp4 -vn -acodec copy -f rtp rtp://10.33.250.241:8002
ffmpeg  -re -i C:\Users\rong\Videos\1.opus -vn -acodec copy -f rtp rtp://10.33.250.241:8002

获取输入设备列表

ffmpeg -devices
ffmpeg -f dshow -list_devices true -i ""

采集麦克风并录制

这里先查看输入设备名称,中文可能会乱码,就用id代替以下,”@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{56E9ADCA-F789-4439-BE53-5C6DCC324AAA}”,个人设备idbash

ffmpeg -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{56E9ADCA-F789-4439-BE53-5C6DCC324AAA}"  C:\Users\rong\Videos\1.opus

采集麦克风编码并录制

ffmpeg -f dshow  -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{56E9ADCA-F789-4439-BE53-5C6DCC324AAA}" -acodec opus -strict experimental  -preset:v ultrafast  C:\Users\rong\Videos\1.opus

采集麦克风并rtp推流

ffmpeg -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{56E9ADCA-F789-4439-BE53-5C6DCC324AAA}" -vn -acodec copy -f rtp rtp://10.33.250.241:8002

麦克风推流音频opus编码

由于云游戏要求超低延迟因此采用opus编码服务器

ffmpeg -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{56E9ADCA-F789-4439-BE53-5C6DCC324AAA}" -vn -acodec copy -acodec opus -strict -2 -f rtp rtp://10.33.250.241:8002

扬声器推流音频opus编码

扬声器采集得下载采集软件 screen capture recorder。
官网连接:http://sourceforge.net/projects/screencapturer/files/app

ffmpeg -f dshow -i audio="virtual-audio-capturer" -vn -acodec copy -acodec opus -strict -2 -f rtp rtp://10.33.250.241:8002

扬声器推流音频opus编码并设置时间戳调整下降延迟。

ffmpeg -f dshow  -itsoffset -0.1 -i audio="virtual-audio-capturer" -vn -acodec copy -acodec opus -strict -2 -f  rtp rtp://10.33.250.241:8002

采集屏幕编码并推流

ffmpeg -rtbufsize 2000M -f dshow  -i video="screen-capture-recorder" -vcodec copy -vcodec nvenc_h264 -zerolatency 1 -f rtp rtp://10.33.250.241:8004

低延迟设置

如下参数为下降延迟设置,一个个调整花费了我大量时间。ide

-rtbufsize 1000k

设置缓冲区大小,过小会爆缓存,而且引发丢帧,并且容易引发传输卡死,太大没有明显影响svg

-audio_buffer_size 1k

设置一秒内音频处理包缓存大小,过小会致使同一个时间段音频数据分为多个数据包处理致使延迟加大,太大会设置失败,若是给流加上此设置貌似不起做用测试

-itsoffset -0.1

//设置时间戳向左偏移,若是不是储存视频文件,或者视频文件推流貌似不起效果编码

-max_muxing_queue_size 0

设置最大处理音频流的数量spa

-bufsize 0

设置单一处理音频流的大小,以上设置结合以下:

ffmpeg -f dshow -rtbufsize 1000M -audio_buffer_size 1k -itsoffset 0.08 -i audio="virtual-audio-capturer" -vn -audio_buffer_size 1 -max_muxing_queue_size 1 -bufsize 1  -acodec copy -acodec libopus -ar 48000 -strict -2 -b:a 64K -f  rtp rtp://10.33.250.241:8002

-itsscale 1

设置输入数据速度,坑点,此参数不当会引发视频流的延迟,最后的设置以下:

ffmpeg -f dshow -rtbufsize 1000M -audio_buffer_size 1k -itsoffset 0.08 -itsscale 1 -i audio="virtual-audio-capturer" -vn -ss 0.08 -audio_buffer_size 1 -max_muxing_queue_size 1 -bufsize 1  -acodec copy -acodec libopus -ar 48000 -strict -2 -b:a 64K -f  rtp rtp://10.33.250.241:8002

先推视频再推音频超低延迟的另外一种设置,测试经过

ffmpeg  -f dshow -rtbufsize 4.5k -itsscale 1 -itsoffset -0.1 -i audio="virtual-audio-capturer" -vn -acodec copy -ss 0.08 -acodec libopus -strict -2 -ar 48000 -b:a 96K -compression_level 0 -frame_duration 10 -application lowdelay -copyts -f  rtp rtp://10.33.250.241:8002

 

 

ffplay -fflags nobuffer  -reorder_queue_size 0 -protocol_whitelist “file,rtp,udp” vlc.sdp