.NET FrameworkのFormsで動画再生
DirectShowとかWindowsMediaPlayerコントロールとかいろいろ試しましたが、この方法に落ち着きましいた。
「WPFのMediaElementをFormsで使う」
とはいえWPFユーザコントロールを使ってXML経由で画面生成されるのも気持ち悪かったのでMediaElementを動的に生成する方法を採用しました。
MediaElementはWPF用のコントロールなのでFormsのControls.Addできません。
なのでWPFユーザコントロールのスーパークラスであるElementHostを生成して、そこにMediaElementをはめ込みました。
ElementHostがFormsとWPFの架け橋になります。
ところでMediaElementってDirectShowなんですかね?
だとするとCODECだけじゃなくDirectShow用のFilterがAND条件で必要なんですが、いまいち分かりませんん。
using System.Runtime.InteropServices; var elm = new System.Windows.Forms.Integration.ElementHost(); this.Controls.Add(elm); elm.Visible = true; elm.Dock = DockStyle.None; elm.Size = new Point(100, 100); elm.Location = new Point(0, 0); var media = new System.Windows.Controls.MediaElement(); elm.Child = media; media.Visibility = System.Windows.Visibility.Visible; media.Margin = new System.Windows.Thickness(0, 0, 0, 0); media.LoadedBehavior = System.Windows.Controls.MediaState.Manual; media.UnloadedBehavior = System.Windows.Controls.MediaState.Manual; media.HorizontalAlignment = System.Windows.HorizontalAlignment.Center; media.VerticalAlignment = System.Windows.VerticalAlignment.Center;
男らしいからソースにコメント書きませんよ。