2

MPEG-TS セグメントをインターリーブしようとしていますが、失敗します。セグメントの 1 つのセットは、ラップトップの内蔵カメラを使用して実際にキャプチャされ、次のコマンドで FFMPEG を使用してエンコードされました。

ffmpeg -er 4 -y -f video4linux2 -s 640x480 -r 30 -i %s -isync -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480

もう 1 つは、次のコマンドを使用してエンコードされた avi ファイルです。

fmpeg -er 4 -y -f avi -s 640x480 -r 30 -i ./DSCF2021.AVI -vbsf dump_extra -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480

次に、オープン ソースのセグメンターを使用して、出力が ts セグメントに分割されます。

両方が同じソース (両方ともカメラ) から来ている場合、正常に動作します。ただし、この場合、セグメントの 2 番目のセットがフリーズします。時間が経っても映像が動かない..なのでエンコードの問題だと思います。だから私の質問は、これが機能するようにffmpegコマンドをどのように変更すればよいですか?

インターリーブとは、セグメントの最初のセットを含むプレイリストと、セグメントの他のセットを含む別のプレイリストを持ち、クライアントが一方を呼び出してから他方を呼び出すことを意味します (HTTP ライブ ストリーミング)

セグメントの最初のセットの 1 つの ffprobe 出力:

Input #0, mpegts, from 'live1.ts':
  Duration: 00:00:09.76, start: 1.400000, bitrate: 281 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 29.92 fps, 29.92 tbr, 90k tbn, 59.83 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 111 kb/s

セグメントの 2 番目のセットの 1 つの ffprobe 出力:

Input #0, mpegts, from 'ad1.ts':
  Duration: 00:00:09.64, start: 1.400000, bitrate: 578 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 22 kb/s

ありがとうございました、

4

1 に答える 1

4

この件に関してかなりの数の質問を見てきました - 以下を参照してください。

  1. HTTP ライブ ストリーミング MPEG TS セグメント
  2. HTTP ライブ ストリーミング用に .m3u8 プレイリスト ファイルを更新しますか?

正確な問題はわかりませんが、ほとんどの人は、両方のソースからのコンテンツが異なると、フリーズが発生すると不平を言っていると思います。

この状況は、PTS や PCR が不連続であり、プレイヤーがこれを認識していない、またはフラッシュしていない場合に発生する可能性があると思います。おそらく、タイムスタンプのシーケンスを特定し、それを修正することで問題が解決するかどうかを確認できます。

また、3.3.11 を参照してください。https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-07の: EXT-X-DISCONTINUITY

EXT-X-DISCONTINUITY タグは、
それに続くメディア セグメントとその前のメディア セグメントとの間のエンコーディングの不連続性を示します
。変更される可能性のある一連の特性は次のとおりです。

o ファイル形式
o トラックの数とタイプ
o エンコーディング パラメータ
o エンコーディング シーケンス
o タイムスタンプ シーケンス

したがって、問題が上記のいずれかである場合は、プレイリスト ファイルの不連続フラグが役立つ可能性があります。これをいくつか試して、詳細を入力してください。これは他の多くの人にも役立つと思います。

于 2011-12-27T12:13:20.573 に答える