7

ユーザーの Web カメラを (ブラウザーから) サーバーにストリーミングしたいのですが、サーバーがストリームを操作し (そのビデオ ストリームでいくつかの C アルゴリズムを実行)、ユーザーに情報を送り返す必要があります。

私は WebRTC と MediaCapture をよく見て、https ://bitbucket.org/webrtc/codelab/overview の例を読んでいます。

ただし、これはピアツーピアのビデオ チャット用に作成されています。私が理解したことから、 getUserMedia からの MediaStream は RTCPeerConnection 経由で ( addStream を使用して) 送信されます。私が知りたいのは、これを使用できますが、サーバーでビデオ ストリームを処理できますか?

よろしくお願いいたします。

4

1 に答える 1

11

これが私が設計したソリューションです。同じ種類の情報を求めている人のためにここに投稿します:-)

フロントエンド側

私は WebRTC API を使用します: でウェブカメラ ストリームを取得getUserMediaRTCPeerConnectionますRTCDataChannel。ストリームは DTLS で暗号化され (必須)、マルチメディア ストリームは RTP と RTCP を使用します。ビデオは VP8 でエンコードされ、オーディオは Opus でエンコードされます。

バックエンド側

バックエンドでは、これが複雑な部分です。私が見つけることができる最良の(まだ)代替手段はJanus Gatewayです。DTLS ハンドシェイク、RTP/RTCP デマルチプレクサなど、多くのことを処理します。基本的に、RTP パケットが送信されるたびにイベントを発生させます。(RTP パケットは通常、MTU のサイズであるため、ビデオ フレームと RTP パケットの間に 1:1 のマッピングはありません)。

次に、GStreamer (バージョン 1.0) を構築して、RTP パケットをデパケット化し、VP8 をデコードし、ビデオのスケーリングと色空間/フォーマット変換を確実にして、BGR マトリックス (OpenCV と互換性があります) を発行しました。AppSrcパイプラインの最初とAppSink最後にコンポーネントがあります。

やり残したこと

優れたスケーラビリティ (スレッド、メモリ リークなど) を確保し、このプログラム内にある C++ ライブラリを使用するクリーンで効率的な方法を見つけるために、追加の対策を講じる必要があります。

お役に立てれば !

于 2014-07-09T17:51:25.330 に答える