multifilesrc
が最も簡単な方法ですが、「メディアの長さ」がわかっているメディア ファイルでは機能しません。ファイルに時間または長さに関する情報がない場合にのみ、ビデオファイルをループできます。
メディアの長さが表示されている場合、またはファイルを前後にシークできる場合は、任意のメディア プレーヤーでファイルを開きます。これは、メディアの長さを認識しており、multifilesrc
ループしないことを意味します。
GStreamer を使用してビデオ ファイルをタイム トラックのないファイル (ストリーム ファイル) に変換する方法:
コマンド ラインで 2 つのパイプラインを実行する必要があります。最初にレコーダーを実行します。
gst-launch-1.0 udpsrc port=10600 ! application/x-rtp-stream ! rtpstreamdepay name=pay1 ! rtph264depay ! h264parse ! video/x-h264,alignment=nal ! filesink location=my_timeless_file.mp4
開始し、着信ストリームを待ちます。
別のターミナルで play パイプラインを実行します。
gst-launch-1.0 filesrc location=my_file_with_time_track ! queue ! decodebin ! videoconvert ! x264enc ! h264parse config-interval=-1 ! rtph264pay pt=96 ! rtpstreampay name=pay0 ! udpsink host=127.0.0.1 port=10600
再生パイプラインが開始し、ファイル全体をストリーミングすると最終的に終了します。最初のコマンド ラインに戻り、Ctrl+C で記録パイプラインを終了します。
(udpsrc/udpsink の代わりに、appsrc/appsink のような他のメカニズムを使用してストリームを作成できます)
multifilesrc
これで、 with ループで使用できる新しいファイルが作成されました。
gst-launch-1.0 multifilesrc location=my_timeless_file.mp4 loop=true ! queue ! decodebin ! videoconvert ! ximagesink
multifilesrc
既知の長さのファイルをループしないのはなぜですか?
メディアの長さがわかると、EOS メッセージを下流に送信し、パイプライン全体を NULL 状態にするため、ファイルの終わり (バイト ストリーム) に達したときにその情報を削除することで、次に再生するファイルを見つけようとします ( 「マルチ」であることを思い出してください)。デフォルトでは、"image_%d.png" のようなワイルドカードの場所を受け入れることができます)。次のファイルを指すワイルドカードがない場合、既知のファイルのみにループ バックします。