私は現在、ライブカメラ アプリケーション用の動的 HLS セグメンターを開発しています。そのため、外部 RTMP ストリームをキャッチし、ffmpeg でセグメントに変換します。
次のコマンドが機能します。
ffmpeg -i rtmp://"$serverip"/"$application"/mp4:"$stream_name".f4v -c:v libx264 -profile:v baseline -level 5.1 \
-c:a aac -strict experimental -flags +global_header -f mpegts - | ffmpeg -i - -c copy -map 0 -f segment \
-segment_list /tmp/hls/"$id"/"$stream_name".m3u8 -segment_format libmp3lame -segment_time 10 \
-segment_wrap 4 /tmp/hls/"$id"/"$stream_name"%03d.ts
しかし、このコマンドを使用すると、ライブストリームと HLS 出力の間に大きな遅延が発生します (約 1 ~ 2 分!)。
そこで別のコマンドを試してみたところ、20 ~ 30 秒の遅延が発生しました。私の唯一の問題は、オーディオ ストリームが認識されず、HLS ファイルにも配置されないことです (つまり、ビデオしか取得できず、オーディオはまったく取得されません)。
ffmpeg -probesize 50k -i rtmp://"$serverip"/"$application"/mp4:"$stream_name".f4v \
-c:v libx264 -b:v 128k -g 90 -c:a aac -strict experimental -flags -global_header -map 0 \
-f segment -segment_time 3 -segment_list /tmp/hls/"$id"/"$stream_name".m3u8 -segment_list_flags +live \
-segment_list_type m3u8 -segment_list_size 5 -segment_format mpegts /tmp/hls/"$id"/"$stream_name"%d.ts
-c:a aac フラグは、オーディオの多重化にも機能するはずだと思いました。
2番目のコマンドで何がうまくいかなかったのか、何か提案はありますか? オーディオ ストリームも確実にセグメント化する必要があります。
前もって感謝します
アップデート:
FFMPEG コマンドのいくつかの出力:
コマンド (2) を開始し、オーディオ出力を取得しましたが、毎回動作しないようです。
動作中のコマンド 2 からの出力、音声が動作中: http://pastebin.com/bhxfNQBg
動作中のコマンド 2 からの出力、オーディオが動作していない (何も変更されていない): http://pastebin.com/engEuSdn
私にとって奇妙なのは、次の行です。
[flv @ 0x1eed900] New audio stream 0:1 at pos:716680 and DTS:0s
これは、hls 側のオーディオが機能していない場合にのみ発生します。
どんな助けでも大歓迎です
更新 2:
ストリームが公開された後に ffmpeg コマンドを開始すると問題が発生するようです。
1. ストリームを開始します (AMS への nc 接続が確立されます) 2.
FFMPEG
コマンドを開始します (ストリームがパブリッシュされるまでアイドル状態になります)
3. パブリッシュを開始します
1. ストリームを開始します
2. ユーザーが参加し、公開を開始し
ます 3. ffmpeg コマンドをトリガーします