WindowsMediaPlayerコントロールを使って動画プレイヤーを作成してみました。できることは再生と停止、一時停止、mp4ファイルのリストを作って指定した部分だけ再生する・・・です。

ツールボックスにWindowsMediaPlayerコントロールを追加する

デザイナでWindowsMediaPlayerコントロールをフォームにドラッグアンドドロップできればいいのですが、通常はないので、自分で追加します。

ツールボックスを右クリックして[アイテムを選択]を選択、そのあと表示されるダイアログのCOMの部分からWindowsMediaPlayerを選択します。

ただしWindowsForms(.NET5.0)の場合はうまくいきません。

WindowsForms(.NET Framework)でおこなってください。

するとツールボックスにWindowsMediaPlayerコントロールが追加されるので、これをフォームにドラッグアンドドロップすれば使うことができます。

ただし、このままでは

COM 参照 WMPLib は ActiveX コントロール AxWMPLib の相互運用アセンブリですが、コンパイラによって /link フラグでリンクされるように設定されています。この COM 参照は参照として処理され、リンクされません。

という警告が出てきます。

そこでソリューションエクスプローラーのなかの[参照]のなかからAxInterop.WMPLibを選択し、[プロパティの相互運用型の埋め込み]をfalseにしてください。これでうまくいくはずです。

WindowsForms(.NET5.0)の場合

ではWindowsForms(.NET5.0)の場合はどうすることもできないのでしょうか? WindowsForms(.NET Framework)でいったんビルドすると実行ファイルが生成されるフォルダのなかにAxInterop.WMPLib.dllとInterop.WMPLib.dllが生成されます。これを拾ってきて、参照マネージャーをつかって追加します。そしてAxInterop.WMPLibを選択し、[プロパティの相互運用型の埋め込み]を「いいえ」に変更します。

あとは以下のようにすればWindowsMediaPlayerコントロールが表示されます。

WindowsMediaPlayerコントロールを使って動画プレイヤーを作成する

それではメニューを追加します。

まず再生ですが、

これでできます。

もし一時停止しているのであれば上記の方法では最初からの再生になるので

これで続きから再生できます。

停止と一時停止はそれぞれ

です。

ではオリジナルのメディアプレーヤーをつくっていきましょう。

PlaybackInfoクラス

動画を最後まで再生するのではなく指定した場所まで再生したら次の動画を再生する仕様なので、mp4ファイルのパス、開始時間、終了時間をクラスで管理します。

FormPlaylistクラス 登録されているファイルリストを編集する

次に登録されているファイルのリストを確認、編集するために別のフォームを作成します。

フィールド変数 PlaybackInfosにPlaybackInfoのリストを格納して表示させるとリストビューにファイルと再生時間の一覧が表示されます。そして[新規登録]や[編集]を選択すると新しく動画を登録できたり、すでに登録されている内容を変更することができます。

本当は順番を変更したりいらなくなったデータを削除する機能もつけたほうがいいのですが、今回は割愛ということで・・・。

FormPlaylistクラスのコンストラクタを示します。

次にダイアログが表示されるときに行なわれる処理を示します。リストビューを初期化して自作メソッド LoadDataを呼び出してデータを表示します。

登録されている動画ファイルを表示

PlaybackInfosに格納されているデータを表示させる処理を示します。

登録されているデータを編集する

リストビューのアイテムが選択されている状態でデータを編集するための処理を示します。ここではまた新しいダイアログを表示させます。FormEditクラスは後述。

新しいデータを登録する

新しいデータを登録するための処理を示します。この処理も先ほどと同じダイアログを表示させます。

FormEditクラス

次にデータを新しく追加したり既存のデータを編集するためのFormEditクラスを示します。

コンストラクタ内でNumericUpDownコントロールの上限値の設定と登録ボタンがおされたときにDialogResult.OKを返すための処理、テキストボックスにドラッグアンドドロップでファイルパスを設定できるようにするための準備をしています。

テキストボックスにファイルをドラッグアンドドロップしたときにファイル名を取得して文字列をセットできるようにしています。拡張子が.mp4でない場合は無視です。

編集前のデータを表示する

ダイアログが表示されたときの処理を示します。FilePathが空文字列でない場合はファイルのパスを表示させます。また開始時間と終了時間もそれぞれ表示させます。

登録・確定したときの処理

登録ボタンがおされたときの処理を示します。NumericUpDownコントロールとテキストボックスから取得したデータをフィールド変数に格納します。この値が正当かどうかはFormPlaylistクラスで判断します。

Form1クラスの処理

最後にForm1クラスの処理を示します。

タイマーをつかって0.1秒おきにどこまで再生されているか調べて終了位置まで再生されていたら次の動画を再生し、次の動画がなければ終了となります。

WindowsMediaPlayerコントロールの初期化

フォームが表示されたらWindowsMediaPlayerコントロール初期化の処理をおこないます。

再生リストの保存と読み出し

すでに作成された再生リストの保存と読み出しの処理を示します。

登録されているデータを編集する

メニュー [リストを編集する]が選択されたときの処理を示します。

再生、停止、一時停止

再生、停止、一時停止が選択されたときの処理を示します。一時停止の場合は再生時にはその位置から再開します。停止している場合は最初からの再生になります。

終了位置に達したら次の動画へ

0.1秒ごとに再生終了位置に達しているかどうかを確認して、終了位置に達しているのであれば次の動画を再生します。また再生中はどの動画ファイルをどこまで再生しているのかをステータスバーに表示します。

ステータスバーに動画再生の情報を表示

これはステータスバーに文字列を表示させるためのメソッドです。