質問

私はいくつかのアイデアあなたのいくつかは、この問題にアプローチする方法を1を取得したいです。 私は、そのセンサーの一つとしてLinuxを実行して(V4L2ドライバで)ウェブカメラを使用しているロボットを、持っています。私はgtkmmのでコントロールパネルを書きました。サーバとクライアントの両方がC ++で書かれています。サーバーがロボットで、クライアントは、「コントロールパネル」です。画像解析は、ロボットに起こっている、と私は2つの理由からコントロールパネルへのカメラからの映像をバックストリーミングしたいと思います: A)楽しみのために B)画像解析結果をオーバーレイするために

だから私の質問には、コントロールパネルにウェブカメラからビデオをストリーミングするだけでなく、それを処理するために、ロボットのコードを優先するためにいくつか良い方法は何ですか?私は、(映像データ専用)新しいネットワークポートは、私が考える最善だろう、それは私自身の映像圧縮方式を書き込み、既存のネットワークポートを介して、それを入れて興味がありません。問題の第二部では、私はgtkmmの中でビデオを表示しますどのようにでしょうか?私はそれは難しいことだと思うのgtkmmで)ビデオデータが非同期に到着し、私は(メインを制御できません。

私はVLC、gstreamerのか、私は知らない、他の一般的な圧縮ライブラリのようなものを使用することに開いている。

ありがとう!

編集: ロボットは、Linuxのバージョン、ないX11のようなデスクトップを実行し、1GHzのプロセッサを持っています。

役に立ちましたか?

解決

GStreamerには非常に少ない労力で、あなたのためにこれのほぼすべてを解決し、また、口が達者なイベントシステムとうまく統合されています。 GStreamerにはV4Lソースプラグイン、GTK +出力ウィジェット、各種フィルタビデオをデコード/エンコード/サイズを変更するために、すべての最高、ネットワークシンクとマシン間でデータを移動させる供給源を含む。

プロトタイプのために、あなたがビデオパイプラインを組み立て、それらをテストするための「GST-打ち上げ」ツールを使用することができ、それはあなたのコードでプログラム的にパイプラインを作成するには、かなり単純です。 Webカメラなどでこれをやって人々の例を見て「ストリーミングのGStreamerネットワーク」を検索します。

他のヒント

私は実際に使用する技術についてはよく分からないんだけど、あなたはフレーム落ちを回避したい場合は、これは*****巨大な同期になってしまうことができます。私は、同時にファイルやネットワークへのビデオをストリーミングました。 1回の書き込みと2回の読み取り:私は最終的にやってしまったことは3つのポインタを持つ大きな円形のバッファを使用していました。バッファから読み出され、への書き込みになることがない他人の両方によって読み取りバッファ内のポイントに達した場合に一時停止になるバッファに1回の書き込みと、2つのリーダースレッド:3つの制御スレッド(およびいくつかの追加の符号化スレッド)がありましたファイル/ネットワーク(と彼らが先にプロデューサーの得た場合一時停止)。すべてが書かれており、フレームとして読まれたため、同期のオーバーヘッドを最小限に抑えることができます。

、私のプロデューサーは、(別のファイルソースからの)トランスコーダだったが、あなたのケースでは、あなたはカメラがそれが通常行うどんな形式で全体のフレームを生成し、唯一のサーバーのために(ffmpegのようなものを持つ)トランスコーディングを行うことをお勧めしますロボットは、画像を処理している。

ロボットが一時停止し、ストリーミングサーバが追いつくのを待つことができないので、リアルタイムのフィードバックを必要とするため、

あなたの問題は、しかし、少し複雑です。だから、可能な限り高速に制御システムにフレームを取得し、「コントロールパネル」へのストリーミング用に別途循環バッファに一部をバッファリングすることがあります。特定のコーデックが他より優れたフレーム落ちハンドルなので、ネットワークがあなたの後ろになれば(それが読み込まれていないように注意しながら)バッファの最後でフレームを上書きし始めることができます。

あなたは「新しいビデオ・ポート」を言うと、私はそれは難しいあなたが望む動作するように見つけることだVLC / gstreamingについて話し始めるとき。明らかに、これらのソフトウェアパッケージは、ストリーミングを支援し、多くのプロトコルを経由して圧縮するが、明らかに、あなたは、ストリームを送信するためのネットワークポート」ではない「ビデオポート」を必要がありますされます。

あなたが本当にワイヤレスビデオを介してディスプレイ出力を送信している別の問題です/ TVフィードを何を意味するか、しかし、あなたはその上で、ハードウェアの専門家ではなく、ソフトウェアの専門家からのアドバイスが必要になります場合。

に移動します。私は、UDP MMS /プロトコルを介してストリーミングをたくさんやったし、VLCは(サーバおよびクライアントとして)非常によく、それを処理します。しかしそれは、デスクトップ用に設計されていて、あなたが望むほど軽量ではないかもしれません。オーバー手持ちのgstreamerの、mencoderのか、ffmpegのような何かは、私が考える良いことになるだろう。ロボットは、CPUのどのような種類がありますか?あなたはリアルタイム圧縮を計画している場合は、イサキのビットが必要になります。

は、クライアント側では、私はあなたがGTKでビデオを処理するためのウィジェットの数を見つけると思います。私はインターフェイスの詳細を心配する前に、そのになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top