質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

6663閲覧

WPF 複数の動画を順番に再生したい

kawauso

総合スコア56

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2017/11/02 00:33

お世話になっております。

行いたいこと
動画を順番に再生したいと思っています。

仕様
・再生したい動画を指定(動画1,動画2,動画3,…,動画N)→ボタンを押す→新しいウィンドウを開き動画を順番に再生したい。
・動画1を再生し動画1が最後まで再生されたら、動画2を再生…動画Nが最後まで再生されたら終了 という挙動をさせたいと思っています。
・連続で再生させたいため、途中で停止・つづきから再生などどの機能は必要ありません。

また、現在どの動画を再生しているかを区別したいと考えています。

動画に関して
拡張子: wmv (mp4, aviなどでも可)
動画時間: 1つあたり10秒前後
フレーム: 30フレーム

質問
上記の行いたいことを解決できるような方法をご存知であれば、よろしくお願いします。
(このようなライブラリを使用すれば、できるのではないか など)

調べてみたところMediaElementを使用すれば簡単に操作できそうではありますが、1つの動画を再生するサンプルはありましたが、
複数を順番に再生する方法は見当たりませんでした。

環境
C#, .NET4.6, VS2017Pro, WPF, Win10

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

動画を最後まで再生したらMediaEndedイベントが上がりますので、そのタイミングで次の動画を再生するば良いのでは?

※動画はローカルにあるのですよね?
※この方法だと動画の切替で少しもたつくと思います。完全にシームレスで再生しないといけないということでしたら悪しからず。

XAML

1 <MediaElement Name="mMediaElement" MediaEnded="OnMediaEnded" LoadedBehavior="Play"/>

C#

1/// <summary> 2/// 再生対象の動画ファイルパスリスト 3/// </summary> 4public List<string> Movies { get; } = new List<string>() 5{ 6 @"C:\1.wmv", 7 @"C:\2.wmv", 8 @"C:\3.wmv", 9}; 10/// <summary> 11/// 現在再生中の動画ファイルのインデックス 12/// </summary> 13public int CurrentMovieIndex { get; set; } = 0; 14 15//---------------------------------------------- 16/// <summary> 17/// Window起動時 18/// </summary> 19/// <param name="sender"></param> 20/// <param name="e"></param> 21//---------------------------------------------- 22private void Window_Loaded(object sender, RoutedEventArgs e) 23{ 24 this.mMediaElement.Source = new Uri(Movies[CurrentMovieIndex++], UriKind.Absolute); 25} 26 27//---------------------------------------------- 28/// <summary> 29/// 再生完了時イベント 30/// </summary> 31/// <param name="sender"></param> 32/// <param name="e"></param> 33//---------------------------------------------- 34private void OnMediaEnded(object sender, RoutedEventArgs e) 35{ 36 //最後まで再生したら終了 37 if( CurrentMovieIndex == Movies.Count() ) 38   { 39 Cloes(); 40 return 41  } 42 //新しい動画ファイルをソースとして設定 43 this.mMediaElement.Source = new Uri(Movies[CurrentMovieIndex++], UriKind.Absolute); 44}

投稿2017/11/02 02:16

ebiryo

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kawauso

2017/11/02 23:14

回答ありがとうございます。 思っていたものが作成することができました。 ウィンドウの表示はもたついても構わないので、切替をもう少しスムーズにすることは可能でしょうか? MediaElementでは厳しいのでしょうか?
ebiryo

2017/11/05 23:54

それはやり方次第かと思います。もたつく原因はファイルの読み込みにあるわけですから、例えばMediaElementを2つ用意しておき、あらかじめ次の動画を読込んでおいて、1つ目の再生が終わったら2つ目の再生を開始等で対応できませんんか? もしくは対象となる動画ファイルが数個なら、動画ファイル数分MediaElementを用意しておいても良いのではないですか?
kawauso

2017/11/06 03:05

アイデアありがとうございます。後者の方法で実装してみたいと思います。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問