我可以使用 ffmpeg 为输出 rtmp 流设置不同的端口吗?
例如,
ffmpeg -listen 1 -i rtmp://server0:port/live/key -c copy -f flv rtmp://server1/live/key -f flv rtmp://server2/live/key
我需要为服务器 1 和服务器 2 设置不同的端口,但我不知道该怎么做。如果您能帮助我,我将不胜感激
答案1
您可以使用三通复用器。
笔记:
- 使用时球座, 我们必须地图视频和音频。
使用以下语法:
ffmpeg -listen 1 -i rtmp://server0:port/live/key -c copy -f tee -use_fifo 1 -map 0:v? -map 0:a? "[f=flv]rtmp://server1:port1/live/key|[f=flv]rtmp://server2:port2/live/key"
-f tee
- 使用 tee muxer(将输出分成两个 URL)。-map 0:v? -map 0:a?
- 映射视频和音频(?
在没有视频或音频流的情况下需要)。"[f=flv]rtmp://server1:port1/live/key|[f=flv]rtmp://server2:port2/live/key"
将 输出分成两个 RTMP 流 -server1:port1
并且选择 FLV 输出格式 (针对每个)。server2:port2
[f=flv]
-use_fifo 1
- 允许补偿输出的不同速度/延迟/可靠性。
测试
以下是将合成视频和音频流式传输到两个 FFplay 实例的示例:
从不同的终端执行每个命令。
ffplay -listen 1 -timeout 1000000 -i rtmp://127.0.0.1:5000/live/key
ffplay -listen 1 -timeout 1000000 -i rtmp://127.0.0.1:6000/live/key
等待几秒钟...
ffmpeg -re -f lavfi -i testsrc=size=192x108:rate=25 -f lavfi -i sine=frequency=400 -vcodec libx264 -pix_fmt yuv420p -acodec aac -ar 22050 -f tee -use_fifo 1 -map 0:v? -map 1:a? "[f=flv]rtmp://127.0.0.1:5000/live/key|[f=flv]rtmp://127.0.0.1:6000/live/key"
请先执行测试,如果不行请告诉我。