[WPF]MediaElementで動画をスムーズに切り替える

2021/07/21

今、WPF で複数の動画ファイルをシーケンシャルに再生するソフトウェアを作っています。動画ファイルの再生には以下のように MeidaElement を使っています。

<Grid>
    <MediaElement Source="{Binding MediaPath.Value}" />
</Grid>

MediaElement.Source のパスを変更する事で次の動画に切り替える事はできたのですが、動画と動画の間がスムーズに繋がらず、一瞬途切れてしまいます。動画を切り替えるタイミングでファイルのロードが挟まるので途切れるのは当然なのですが、ダブルバッファリングの仕組みが標準で備わっていることを期待していました。

しかし、Webで調べてみたところ、自分でダブルバッファリングしろというような回答が見つかりました。

https://stackoverflow.com/questions/9440017/how-to-smoothly-play-a-sequence-of-videos-with-wpfs-mediaelement

どうも MediaElement には標準でダブルバッファリングの仕組みは備わっていないようです。

仕方なく、以下のような感じで2つの MediaElement.Visibility を交互に切り替えるような形で実装しました。

<Grid>
    <MediaElement Name="mediaElement" Source="{Binding MediaPath1.Value}" 
          Visibility="{Binding MediaBuffer1Visiibility.Value, Converter={StaticResource BoolToVisibilityConverter}}" />
    <MediaElement Name="mediaElement2" Source="{Binding MeidaPath2.Value}" 
          Visibility="{Binding MediaBuffer2Visiibility.Value, Converter={StaticResource BoolToVisibilityConverter}}" />
</Grid>

これで無事、動画の切り替えがスムーズに行われるようになりました。

ちょっとしたことですが、同じ問題にはまった方の参考になるかもしれないので記事に残しておきます。


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

関連記事