シナリオ

シナリオ

シナリオ

RTPを使用して2つのホスト間でビデオをストリーミングしようとしています。以前は、次の2つのコマンドを使用してVLCを使用してこの問題を解決しました。

サーバ側

cvlc video_file.mp4 --sout "#transcode{vcodec=h264, acodec=mpga, ab=128, channels=2, samplerate=44100}: duplicate{dst=rtp{dst=10.X.X.X, port=5004, mux=ts}}" --run-time 40 vlc://quit

クライアント側

cvlc rtp://@:5004 --sout "#transcode{vcodec=h264, acodec=mpga, ab=128, channels=2, samplerate=44100}: std{access=file, mux=mp4, dst=downloaded.mp4}" --run-time 40 vlc://quit

要件

今度は、FFMPEG を使用して同じことを実現したいと考えています。同等のコマンドは何でしょうか?

これまでの作業

サーバ側

ffmpeg -re -i video_file.mp4 -vcodec libx264 -an -f rtp rtp://10.X.X.X:5004 -vn -acodec libtwolame -f rtp rtp://10.X.X.X:5005

クライアント側

ffmpeg -i rtp://10.X.X.X:5004 -vcodec libx264 -an -i rtp://10.5.19.244:5005 -acodec libtwolame -vn -t 00:00:35 downloaded.mp4

ただし、この方法では受信したストリームを録画することはできません。

答え1

クライアントのIPが10.0.0.2であると仮定します。

サーバー側で実行するコード

ffmpeg -re -thread_queue_size 4 -i source_video_file.mp4 -strict 2 -vcodec copy -an -f rtp rtp://10.0.0.2:6005 -acodec copy -vn -sdp_file saved_sdp_file -f rtp rtp://10.0.0.2:7005

このコードを実行すると、という名前のSDPファイルが生成されますsaved_sdp_file。これは、ストリームを受信するために必要なクライアントに転送されます。

クライアント側で実行するコード

ffmpeg -protocol_whitelist "file,rtp,udp" -i saved_sdp_file -strict 2 saved_video_file.mp4

答え2

サーバーアドレスを10.158.210.39、UDPポート5155でストリーミングすると仮定します。

サーバ側:

ffmpeg -re -i test_video.mp4 -c:v copy -c:a copy -f rtp_mpegts -sdp_file test_video.sdp "rtp://10.158.210.39:5155"

rtp_mpegtsVLCでもサポートされている形式です。sdpストリームを受信するためにクライアントにファイルを送信します。

クライアント側:

ffmpeg -protocol_whitelist rtp,udp -i "rtp://10.158.210.39:5155" save.mp4

受信したストリームは保存されます保存.mp4

ffplay を使用して受信するには:

ffplay -protocol_whitelist rtp,udp -i "rtp://10.158.210.39:5155"

これによりビデオが再生されます(mobaxtermを使用している場合はSSH接続でも)

関連情報