WebRTCからライブビデオストリームをキャプチャする必要があります(または、すべてのブラウザではサポートされていなくても、PoCとしてクライアントWebカメラから他のキャプチャメカニズムを使用する必要があります)。
このライブビデオはサーバーコンポーネント(ASP.Net MVC/Web API)で処理する必要があります。サーバーのコードは次のようになると思います。
[HttpPost]
public ActionResult HandleVideoStream(Stream videoStream)
{
//Handle the live stream
}
キーワードまたは役立つリンクを探しています。
Base64 jpgを使用して個々のフレームを送信する方法をすでに実装しましたが、base64エンコーディングには大きなオーバーヘッドがあり、ビデオエンコーディングを使用してビデオをより効率的に送信できるため(違いを送信できるため)、これはまったく役に立ちません。 VPx -vp8-などを使用してフレーム間で)、必要なソリューションは、クライアントのWebカメラからビデオをキャプチャし、それをストリーム(またはデータのチャンク)としてサーバー(asp.net)にライブで(記録されずに)送信する必要があります。新しいビデオデータを表す。
あなたの質問は広すぎるので、オフサイトのリソースを求めることは、stackoverflowのトピックから外れていると見なされます。意見が出やすい発言を避けるために、私は一般的な概念への回答を制限します。
Flash/RTMP
WebRTC
はまだすべてのブラウザーで使用できるわけではないため、現在使用中のブラウザーからのWebカメラ入力をキャプチャするために最も広く使用されている方法は、プラグインを使用する方法です。最も一般的な解決策は、人々がそれを好むかどうかにかかわらず、 Adobe Flash Player を使用します。これは、最近のバージョンでの_H.264
_エンコーディングのサポート、およびオーディオのAAC
、_MP3
_などによるものです。
ストリーミングは、最初にフラッシュ通信用に設計された [〜#〜] rtmp [〜#〜] プロトコルを使用して行われます。プロトコルはTCP
で機能し、RTMPS
(_TLS/SSL
_を暗号化する場合は_RTMP
を暗号化する)、RTMPT
(RTMP
はファイアウォールトラバーサルをHTTP
にカプセル化する)などの複数のフレーバーを備えています。
ストリームは通常 [〜#〜] flv [〜#〜] コンテナ形式を使用します。
Flashを使用してウェブカメラ入力をキャプチャし、RTMP
サーバーにストリーミングするオープンソースプロジェクトを簡単に見つけることができます。
サーバー側では、2つのオプションがあります。
RTMP
サーバーを実装して、送信ライブラリと直接通信し、ストリームを読み取るRTMP
サーバーの1つを使用し、ASP
にクライアントのみを実装します(アプリで何をしようとしているかに応じて、着信ストリームをその場でトランスコードすることもできます)。WebRTC
WebRTC
を使用すると、次のいずれかを実行できます。
WebRTC
のピアツーピア通信機能を使用して、サーバーをピアの1つにします。私がまだ個人的にテストしていない2番目のシナリオの可能な解決策は、Adam Roachによって提供されています。
- ブラウザは、JavaScriptを含むWebページを取得します。
- ブラウザは次のようなJavaScriptを実行します。
getUserMedia
を使用してカメラへのハンドルを取得します。RTCPeerConnection
を作成しますcreateOffer
でsetLocalDescription
とRTCPeerConnection
を呼び出す- オファーを含むサーバーにリクエストを送信します(
SDP
形式)- サーバーは、オファー
SDP
を処理し、独自の回答SDP
を生成します。これは、応答としてブラウザーに返されます。- JavaScriptは、
setRemoteDescription
でRTCPeerConnection
を呼び出して、メディアのフローを開始します。- サーバーはブラウザから_
DTLS/SRTP
_パケットの受信を開始し、ローカルのハードドライブに簡単に読み取り可能な形式で保存することを含め、必要な処理を行います。
これはVorbis
よりもWebM
内で_VP8
_およびSRTP
を使用します(UDP
、TCP
も使用できます)。
ラッパーを使用してRTCPeerConnection
にASP
を直接実装できない限り、ストリームをサーバーアプリに転送する方法が必要になります。
_PeerConnection API
_はWebRTC
の強力な機能です。現在、GoogleハングアウトのWebRTCバージョンで使用されています。あなたは読むことができます ハングアウトはWebRTCをどのように使用しますか 。
これは主題外の質問であることに同意しましたが、最近同じ問題/要件にぶつかりました。私の解決策は、WebRTCExperimentsの MultiStreamRecorder を使用することでした。これは基本的に、X秒ごとにオーディオ/ビデオストリームの「ブロブ」を提供し、これをASP.NET MVCまたはWebAPIコントローラーにアップロードできます ここ 。サーバー上のBLOBを部分的にライブ処理するか、ファイルに連結してから、ストリームが停止したら処理できます。このライブラリで使用されるAPIは、すべてのブラウザで完全にサポートされているわけではないことに注意してください。たとえば、現時点ではiOSはサポートされていません。
私のサーバー側の分析では、ユーザーが完全な文章を話す必要があったため、さらにPitchDetect.jsを使用して、部分的なBLOBをサーバーに送信する前にオーディオストリームの無音を検出しました。このタイプの設定を使用すると、X秒ごとではなく、話し終わった後に部分的なBLOBをサーバーに送信するようにクライアントを構成できます。
1〜2秒の遅延の達成については、HTTPではなくWebSocketで配信を確認することをお勧めしますPOST-ただし、これらのオプションを試して、要件に最適なチャネルを選択する必要があります。
最近のほとんどのIPカメラは、H264エンコーディングまたはMJPEGを使用します。どのような種類のカメラが使用されているのかがわかりません。
本当の問題は、ビデオをオーサリング/編集するためのコンポーネントと、それが必要とするビデオ形式です。どの形式にする必要があるかがわかったら、サーバー側で処理できるように、必要に応じてビデオをトランスコード/トランスフォームできます。
変換/トランスコードするメディアサーバーはいくつでもあり、 [〜#〜] ffmpeg [〜#〜] または nreal Media Server のようなものは変換、デコードなどができますサーバー側で使用できる形式に変換します。私が見たほとんどのIPカメラは、H264 Webベースのブラウザープレーヤーを使用しています。
編集:あなたの最大の敵はあなたの遅延になるでしょう。 1〜2秒の遅延を実現するのは困難です。