C#でDirectShowを使ってUSBカメラの映像を表示
chakemiです。
本日は、USBカメラの映像をC#でDirectShowを使って表示してみたいと思います。
前回同様、「Active Movie control type library」を利用して行ないたいと思います。
開発環境
- WindowsXP SP3
- VisualC#2010Express
まず、はじめにレジストリに登録されたフィルタから目的のフィルタを見つけIFilterInfoオブジェクトを返すAddFilter関数を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
AddFilter関数を使ってフィルタグラフにVideo Capture Sourceフィルタを追加します。
1 2 |
|
※ここでは、ご自分の使用しているフィルタ名を指定してください。フィルタ名は「GraphEdit」や「GraphStudio」を使って調べられます
次に、AddFilter関数を使って、Rendererフィルタを追加します。
1
|
|
最後に、下のような感じで、IFilterInfoのFindPinメソッドで出力ピンを取得するだけですが、
1 2 3 |
|
なぜかうまく取得出来ませんでした。 Countは取れているのにNameが取れません。。。(T T) FindPinメソッド内の型キャストがうまく出来てないんじゃないかと思うのですが、素人には分かりません。。。
仕方がないので、IFilterInfoのすべてのPin情報から目的のPinを取得するAddPin関数を作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
AddPin関数を使って目的の出力ピン名を指定して、取得します。
1
|
|
※ピン名も環境によって違いがありますので、ご自分の環境にあわせて指定してください。
あとはRenderメソッドを実行するだけ
1
|
|
ウィンドウへの表示は、前回の動画を再生するのと同じですので、こちらを参考にしてください。 以下、全体です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|
※ ここでは、一切エラー処理やリソースの解放をしていないのでご注意ください。
こんな感じで、USBカメラの映像を表示出来ました。