Pi B +とPiカメラを入手し、H.264でエンコードされたビデオをカメラからホームサーバーにストリーミングするための最も効率的な(低CPU)低レイテンシ構成を見つけようとしています。
私は次を読んだ:
(すべてのリンクはからgstreamer-1.0を使用しdeb http://vontaene.de/raspbian-updates/ . main
ます。)
過去数年間、この点に関して多くのことが行われてきました。
もともと、出力をにパイプする必要がありraspivid
ましたgst-launch-1.0
(リンク1を参照)。
次に(リンク2)公式V4L2ドライバーが作成されました。これは現在標準であり、gstreamerのみを使用してパイプなしで直接データを取得できます(特にtowolfの投稿を参照してください»Sat Dec 07、2013 3:34 pm link 2):
送信者(Pi): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
レシーバー: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
正しく理解すれば、どちらの方法でもGPUを使用してH264デコードを実行できますが、プロセス間のパイプがないため、カーネルをもう一度通過する必要がないため、後者は少し効率的です。
今、これについていくつか質問があります。
後者は、カメラからH264を効率的に取得するための最新の方法ですか?について読んだこと
gst-omx
があります... video/x-raw ! omxh264enc ! ...
。これは単にを使用するのとvideo/x-h264
は違うことをしますか、それとももっと効率的でしょうか?違いは何ですか?video/x-h264 ...
パイプラインを使用するときに、実際に使用されているgstreamerエンコーディングプラグインを確認するにはどうすればよいですか?これは、(コード)コンポーネント(h264parse
またはなどfpsdisplaysink
)を明示的に指定する他のパイプラインパーツと比較して、必要な形式を指定しているだけのようです。では、リンク1に、この返信ミカエルLepistöは言及し「私が側をストリーミングから1つの不要なフィルタパスを削除し、」彼が切り出されていることを意味し、
gdppay
そしてgdpdepay
。それらは何をしますか?なぜ必要なのですか?それらを本当に取り除くことができますか?また、受信側で
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
パラメータを指定するudpsrc
ことで、ストリームの途中でストリーミングを開始/再開できることにも言及しています。これらの上限は何を達成しますか、なぜこれらの特定の選択、それらについての詳細はどこで読むことができますか?質問3および4で提案されていること(
caps
、ドロップgdppay
、およびを追加gdpdepay
)を行うと、ビデオの待機時間がさらに悪化します(蓄積しているように見え、時間がたつにつれて待機時間が長くなり、数分後にビデオが停止します)!なぜそうなるのでしょうか?元のコマンドで取得したレイテンシを取得したいのですが、いつでもストリームに参加できる機能もあります。RTSP + RTPは通常、TCPとUDPの組み合わせを使用することを読みました。制御メッセージやその他の紛失してはならないものにはTCP、実際のビデオデータ伝送にはUDPを使用します。上記の設定では、実際にそれを使用していますか、それともUDPのみを使用していますか?gstreamerがこれを処理するかどうかは、私には少し不透明です。
これらの質問のうちの1つでも答えをいただければ幸いです。
cat file | grep ...
ですgrep ... file
。パイプは、カーネルとの間で別のコピー層を追加します。これは、特にメモリ帯域幅が狭いデバイスで簡単に測定できます。gstreamerがデバイスファイルから直接読み取ることができる場合、それを使用してみませんか?あなたのraspivid | cvlc
提案に関して:gstreamerベースのソリューションに切り替える前にこれを使用していましたが、gstreamerよりも最大3秒長い待ち時間があります(理由はわかりません)。
cvlc
〜45%を使用しますが、そのデータレートでパイプを実行するだけで(もう一度覚えておいてください、パイプはそれを遅くしていません)、針をほとんど動かさないと思います。5%未満。あなたが効率的に当然のできるだけこれをしたい場合は...完全に無視できないのです
raspivid | cvlc
1つだけで、それは40〜50%です。人々は、特定の数字を改善するように挑戦する質問に、よりよく反応するかもしれません。今、あなたはそれぞれの理由が重要である理由を説明することなく、多くの理由を尋ねています。
|
を使用すると、このコンテキストで問題が発生するという考えは、BSの信じられないほど素晴らしい部分raspivid | cvlc
です。私はカメラを非常に長い間またはそれと遊ぶために長い時間持っていませんでしたが、それを使用してhttpストリーム(反対側のLinuxで表示可能)を生成するvlc
ことはうまくいくようです。