视频+音频
首先安装好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