Raspberry Piストリームビデオが欲しいので、これを実行しています:
raspivid ... -o - | nc -l -k 4242
しかし、問題は、パイプまたはnc
が、誰かが接続するまでデータをキャッシュしていることです。しかし、私はそれをしたくありません。誰かが接続するまで、すべてのデータを削除したいと思います。
リスニングTCPソケットを設定しました。これには、データが流れる前にクライアントが接続する必要があります。ただし、代わりにUDPソケットを設定した場合でも、ストリームの解釈方法を定義するメタデータがなくても、クライアントが途中で接続することになります。
メタデータを頻繁かつ定期的に提供するプロトコルがある場合は、UDPソケットを試すことができます。私のバージョンのnc
には-k
オプションがありませんが、(少なくとも)2つの異なるバージョンが利用可能であることを認識しているため、テスト済みのコマンドラインの例を示すことはできません。
ビデオをストリーミングしたい場合は、専用のソフトウェアを使用する必要があります。これは複雑な技術分野(多くの特許があるため、複雑な法的分野でもあります)であり、MJPEGなどの単純なものをストリーミングしない限り、netcat
などのナイーブなソリューションで成功する可能性はほとんどありません。
ソフトウェアアプリケーションのいくつかの例は、 Videolan 、 Icecast 、 Opencast 、または Red5 などから見つけることができます。
実際、いくつかを読んで raspivid
のドキュメントxinetd
またはsystemd
によって提供されるようなリスナーを使用して着信接続を処理し、TCP接続が完了したらraspivid
を開始できるようです。確立されています。フロー制御やリアルタイムの帯域幅管理はまだ得られませんが、制御されたネットワークでは、目的を十分に達成できる可能性があります。