私は可能な限り最も単純なユースケースのように聞こえますが、それでも満足できるものはありません。
マルチホームホストがあり、eth1でマルチキャストをリッスンし、すべてのペイロード(UDPパケットヘッダーを含まず、ペイロードのみ)をファイルにプッシュしたいと思います。これが私がすでに試したいくつかのことです、
socat -u UDP4-RECV:6666,ip-add-membership=224.1.0.1:0.0.0.0 CREATE:test.out
おそらく最適ではありませんが、機能するはずです。
ffmpeg
、multicat
、tsudpreceive
およびtsp
を使用できます。
ffmpeg -i udp://<multicast_ip>:<port_number> -c copy -f mpegts test.ts
FfmpegはNULLPIDを削除しますが、他のすべてのPIDをtest.ts
ファイルにコピーすることに注意してください。
別のオプションはmulticat
を使用することです。
multicat -u -U @<multicast_ip>:<port_number> test.ts
デフォルトでは、mutlticat
は入力としてRTPストリームを期待しているため、ソースを通知するために-u
と-U
を定義する必要があります。および宛先にRTPヘッダーが含まれていません。
Opencaster をインストールして、tsudpreceive
を使用できます。
tsudpreceive <multicast_ip> <port_number> > test.ts
TSDuck およびtsp
を使用して実行することもできます。
tsp -rtrue -I ip <multicast_ip>:<port_number> --buffer-size-mb 50 -O file test.ts
rtrue
はtsp
にリアルタイム処理を使用するように指示しています-I ip
-入力がIPストリームであることを定義します--buffer-size-mb
は、バッファサイズをメガバイト単位で指定します。デフォルトは16MBであるため、これは単なるオプションのパラメータです。-O file
は、ファイルへの出力のタイプを定義します。
-t <seconds>
を渡すことにより、FFmpeg
で録音の期間を定義できます。マルチキャットについても同じことができますが、今回は27MHz単位で期間を定義する必要があります。つまり、30秒の記録が必要な場合は、次のパスを渡す必要があります。-d 810000000
(27E + 6 * 30 = 81E + 7)。残りのオプションについては、コマンドのプレフィックスとしてtimeout --foreground 30
を使用できます。これにより、録音が正確に30秒でカットされます。
gstreamer
、cvlc
などを使用して同じことができる可能性が高いですが、私はそれらの構文に精通していません。