C#でウェブカメラからH.264にビデオをエンコードするにはどうすればよいですか?
私が必要なものは何
- これに関するヘルプがある場合は、MSDN。
- エンコーディング/デコーディング用のオープン ソース ライブラリ/ラッパー。
- その方法に関するチュートリアルとブログ記事。
3GP や FLV など、ファイル サイズの小さいものにエンコードする方法の例をいくつか示していただければ幸いです。
DirectShow SDK を調べる必要があります。
H.264 に直接エンコードすることはできませんが、役立つ市販の ActiveX コントロールがあります。しかし、いくつかのことを理解する必要があります。
DirectShow はオーディオ/ビデオ処理フレームワークであり、グラフ編集ツールを使用してデバイスをグラフに配置してテストできます。グラフを作成するには、同様のコードを作成する必要があります。グラフは、相互にやり取りして最終出力を生成する一連のデバイス/オブジェクトです。
DirectShow は .NET で使用できます。GraphEditPlus ツールを使用してグラフを作成し、.NET で使用できます。ただし、DirectShow は COM に密接にバインドされているため、不明なエラーが発生する可能性があるため、.NET の方が適しているとは思えません。ネイティブ C++ で ActiveX コントロールを作成し、DirectShow を使用して全体の記録を行い、WPF で ActiveX を使用する場合、より安定しますが、プログラミングは困難です。
通常、次のようなグラフが必要になります。
Video Source => Demux -> Audio Stream + Video Stream -> MP4Muxer
x264 は無料のオープン ソースであり、優れた MP4Muxer を備えていますが、合法ではありません。コードで H264 を使用するには、特許ライセンスを取得する必要があります。
Intel の IPP は、これまでのところ H264 の最良の実装ですが、directshow に入れるのは少し難しいです。
以下は、.NET でビデオをキャプチャするための CodeProject からの 2 つのサンプルです。
特にH.264は含まれていません。そのために、サードパーティのコンポーネントを使用して、キャプチャ後にビデオを後処理することができます。例: http://www.elecard.com/products/products-pc/sdk/codec-.net-sdk/