ffmpeg 确定性地从 rtmp 流创建片段

ffmpeg 确定性地从 rtmp 流创建片段

我想使用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,或者理论上同时启动两者会产生相同的段,但我真正寻找的是一种能够在任何时间点启动和停止它们的方法。

相关内容