我想使用ffmpeg
“转换”实时 RTMP 流为 hls 或 mpeg-dash。出于冗余目的,我想ffmpeg
同时为一个 RTMP 流运行多个 s。
问题是,当我启动两个已经运行的 rtmp 流的 ffmpeg 时,它们开始生成不同的视频片段。
我希望有某种方法可以以更“确定性”的方式生成这些片段,例如基于 rtmp 时间戳。
有没有办法让两个 ffmpeg 生成相同的片段,以某种方式同步它们?谢谢。
示例命令:
ffmpeg -listen 1 -i rtmp://127.0.0.1:1935/stream/test \
-map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 \
-b:v:0 250k -filter:v:0 "scale=-2:240" -profile:v:0 baseline \
-b:v:1 750k -filter:v:1 "scale=-2:480" -profile:v:1 main \
-use_timeline 1 -use_template 1 -window_size 5 \
-hls_playlist 1 \
-dash_segment_type mp4 \
-window_size 0 \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash \
-hls_base_url 'http://example.com' \
test.mpd
笔记:
- HLS/Dash 模式下的 FFmpeg 主要做两件事:生成视频片段和生成清单。我其实并不关心清单,我可以使用自定义脚本以其他方式生成清单。我唯一需要的就是这些片段
- 在 rtmp 启动之前启动 ffmpeg,或者理论上同时启动两者会产生相同的段,但我真正寻找的是一种能够在任何时间点启动和停止它们的方法。