web-dev-qa-db-ja.com

C#でウェブカメラビデオをストリーミングするにはどうすればよいですか?

ブラウザベースのクライアント(後で作成します)を使用して接続し、ストリーミングビデオを視聴できる単純なサーバーアプリケーションを作成します。そして、私はC#を使いたいです。

Webカメラでビデオまたは高速画像をキャプチャし、ネットワーク経由で送信するには何が必要ですか?

54
The.Anti.9

「ボックス内のキャプチャ/ストリーマー」コンポーネントが必要な場合は、他の人が述べたようにいくつかあります。

すべてを低レベルで制御したい場合は、alliedhackerが指摘するようにDirectShowを使用する必要があります。 C#でDirectShowを使用する最良の方法は、 DirectShow.Net ライブラリを使用することです。これは、DirectShow COM APIをすべてラップし、多くの便利なショートカット機能を備えています。

キャプチャとストリーミングに加えて、録音、オーディオとビデオのフォーマット変換、オーディオとビデオのライブフィルター、その他多くの機能を実行できます。

Microsoftは、DirectShowはなくなると主張しているが、DirectShowが提供するすべてを実行する新しいライブラリまたはAPIをまだリリースしていない。彼らがリリースした最新のものの多くは、まだ内部のDirectShowだと思う。マイクロソフトでのステータスのため、MSDNおよびフォーラムで見つけることができるもの以外には、本や参考文献はそれほど多くありません。昨年それを使用してプロジェクトを開始したとき、このテーマに関する最高の本- Microsoft DirectShow のプログラミングは絶版でした使用済みコピーが約350ドルで購入できます!

22
CMPalmer

このための通常のAPIはDirectShowです。

P/Invokeを使用してC++ APIをインポートできますが、すでにこれを行っているプロジェクトがいくつかあると思います。

http://channel9.msdn.com/forums/TechOff/93476-Programatically-Using-A-Webcam-In-C/

http://www.codeproject.com/KB/directx/DirXVidStrm.aspx

ストリーミングパーツを取得するには、おそらくDirectShowを使用して圧縮コーデックを適用して遅延を減らし、その後ストリームを取得して送信できます。マルチキャストを使用してネットワーク負荷を軽減することを検討できます。

7
Excel Kobayashi

VideoLAN を使用できます。 VideoLANはサーバーとして機能します(または、制御を強化するために独自のC#アプリケーションをラップできます)。ビューアー用の.NETラッパーもあり、これを使用してC#クライアントに埋め込むことができます。

4
Chris Holmes

プロジェクトに VideoCapX を使用しました。メディアプレーヤーで開くことができるMMS/ASFストリームとしてストリーミングされます。その後、メディアプレーヤーをWebページに埋め込むことができます。

あまり制御する必要がない場合、またはコードを記述せずにVideoCapXを試してみたい場合は、 -Broadcast を試してください。彼らはVideoCapXを舞台裏で使用します。

3
faulty

Webブラウザー内からビデオを録画する場合、唯一の選択肢はFlashであると思います。同じことをしようとしています。私たちも主に.NETの家であり、.NETを使用してWebカメラ_from_within_the_browser_をキャプチャする方法がありません。ここに記載されている他のすべてのソリューションは、デスクトップアプリに満足していれば、おそらくうまく機能します。

1
gillonba

ウェブカメラからブラウザに画像をストリーミングする別のオプションは、mjpeg経由です。これは、最新のブラウザのほとんどがタグの一部としてサポートしている一連のjpegイメージです。 C#で記述されたサンプルサーバーを次に示します。

https://www.codeproject.com/articles/371955/motion-jpeg-streaming-server

これはLAN上ではうまく機能しますが、mjpegは他のビデオコーデック(h264、VP8など)ほど効率的ではないため、インターネット上ではあまり機能しません。

0
mark gamache