シンプルな動画再生プレイヤーをC#で自作したいと思って軽く調べてみたところ、WindowsMediaPlayerのコントロールが利用できるという情報がまず目に入りました。
しかし‥
個人的に最低限必須と思っている「MP4を再生可能」「再生」「停止」「一時停止」「コマ送り」「コマ戻し」「ループ再生」「区間指定してのループ再生」(これら全てがショートカットキーで操作可能)といったあたりは全然満たせないっぽい?
ということで、さらに少しだけ調べたことをメモっておきます。
もうこのまま制作しない可能性が大きいですが。。
■WindowsMediaPlayerコントロールを使う方法
・C# Fromで動画再生するには
http://truthfullscore.hatenablog.com/entry/2014/03/03/120602
・ コマ送り再生ができない ⇒ 実装すればできます
・ WindowsMediaPlayerの外観使ってます感バリバリ
・ UI部分のカスタマイズができない
・一時停止中にシークしてもサムネイルが移動しない
試しに作ってみました。
■MediaElementクラスを使用する方法
・3.C#コードでMediaElementを生成
http://coelacanth.heteml.jp/site/silverlight/article_3
■DirectShowを使用する方法
・【C#】Windowsフォーム アプリケーションで動画再生ユーザコントロール
http://atamo-dev.hatenablog.com/entry/2017/01/04/161651
・MediaFoundationを使う (2) MediaFoundation管理クラスの宣言
https://www.timbreofprogram.info/blog/archives/453
メモリ管理に難がある
mp4を標準でサポートしたい場合、DirectShowでもデコーダを各自でインストールすれば可能
■MediaFoundationを使用する方法
・MediaFoundationを使う (1) MediaFoundationの特徴
https://www.timbreofprogram.info/blog/archives/452
MicrosoftがDirectShowに代わってWindowsVista以降で使用できるようにしたマルチメディアAPI群
mp4を標準でサポートしたい場合、MediaFoundation(ほぼ)一択
mp4のサポートはWindows7から
・C#でaviを使いたい!~MediaFoundation~
http://talewin.kagome-kagome.com/%E5%82%99%E5%BF%98%E9%8C%B2/c-%E3%81%A7avi%E3%82%92%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84%EF%BC%81-mediafoundation-
■調べる単語
メディアコンテナ(Media Container)
メディア分離(Demultiplexing)
映像コーデック・デコード(復号)
音声コーデック・デコード(復号)
メディア再生時間管理、表示時刻(Presentation TimeStamp;PTS)管理
映像レンダリング(描画)
音声レンダリング(再生)