3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(VB.Net)DirectShowとWindowsMediaPlayerコントロールで動画を再生させる

1年弱ほどまえに作ったサンプルです。

.Netから直接DirectShowを利用するのと、WindowsMediaPlayerコントロールを利用して動画再生したときの状態を比較するために作りました。

WindowsMediaPlayerコントロールを使うと一時停止や音量などを操作するUIはついてくるのですが、明らかにWMPを使ってるのがバレバレです。また、WMPのバージョンにも左右されますしね。

一方のDirectShowを使う場合はかなりややこしいので扱うにはそれなりのスキルは必要ですね。UIも自分で作らないといけません。

なお、DirectShow、WMPはCOMコンポーネントですが、それ以外にも、.Net純正のMicrosoft.DirectX.AudioVideoPlaybackクラスがありましたが、あまりにバグが多いらしく.Net2.0以降は使用がほぼ無理な状態になりました。

なお、参考元にしたのは下記サイトです。

■WindowsMediaPlayerコントロール

C#でWindows Media Playerを使う

Media Playerエラーを取得するには?

■DirectShow

DirectShow関係 DirectShowに関するかなり詳細な情報があります。

MSDN:VBからDirectShow使うときに使うActiveMovie control type libraryのリファレンス

WindowsMediaPlayerコントロールを使うにはツールボックスWindows Media Player のコントロールを追加してやる必要があります。

DirectShowを使うには参照設定で ActiveMovie control type library を追加してやる必要があります。

下記のサンプルはDataフォルダ内にある動画ファイルをコンボボックスに表示し、開始ボタンを押下すると再生開始し、停止ボタンを押下すると再生停止します。

エラー処理等はちゃんとしてないので注意が必要です。特にCOMコンポーネントを利用してるため例外処理はシビアにならないといけないかもしれません。

デザイナはこんな感じです。

コードをここに載せようとおもったのですが、文字数上の関係で何ページにもおよび面倒なので、ソース自体をZIPで固めてサーバにアップしました。

ここからダウンローできます。サンプル動画も入っているのでファイルサイズは30MB弱です。

一応ビルドしたのも入れてますが、ビルドフォルダのdataフォルダには動画が入ってません。プロジェクトのdataフォルダの動画をコピーするとOKです。

なお、ソースは Visual Studio 2008(VB)で作ってます。

なお、各種形式の動画を試すにはサンプルが必要ですが、下記サイトにある程度のコーデックサンプルがあります。

動画圧縮サンプル