2012-02-25 147 views
1

実行時に一連の動画を作成し、結果を、スムーズな動画のようにしたいと思います。WPFのMediaElementで一連のビデオをスムーズに再生するには?

void mediaElement_MediaEnded(object sender, RoutedEventArgs e) 
{ 
    if (_currentVideoIndex == this.videos.Length) 
     this._currentVideoIndex = 0; 
    PlayNext(); 
} 

void PlayNext() 
{ 
    mediaElement.Source = new Uri(videos[_currentVideoIndex++]); 
    mediaElement.Play(); 
} 

動画は細かいプレーが、プレイヤーは各映像間の第二の約半分のための空白行く:

このコードは、私の現在のアプローチを示しています。

私はこの時点で特定のプラットフォームに拘束されていません。WPF/MediaElementは私が始めているところです。

+1

次のビデオをバッファリングすることができます。したがって、常に2つのビデオを読み込むことができます。つまり、読み込みが完了したら、すぐに読み込まれた次のMediaElementに切り替えることができます。これは、常に描画して更新するときのGDI +の点滅の問題と同じコンセプトです。 – Jason

+0

+1良い答え、あなたは答えとしてそれを書くべきであり、コメントだけではありません。 –

答えて

3

次のビデオをバッファリングすることができます。したがって、常に2つのビデオを読み込むことができます。つまり、読み込みが完了したら、すぐに読み込まれた次のMediaElementに切り替えることができます。

常に描画してリフレッシュするときのGDI +のフリッカーの問題と同じ概念です。その解決策は、フォームをダブルバッファリングすることです。ダブルバッファリングがないと、GDI +はフォームをクリアします(これはユーザーが見る瞬間的なちらつきです)。ダブルバッファリングでは、GDI +は一時的な画面に描画し、瞬時にフォーム上で更新するため、ちらつきがなくなります。

シナリオでは、同様のソリューションが必要です。リストの動画では、常に2つの動画を読み込んでおきます(最初の動画を読み込んだ後に2番目の動画を非同期的に読み込んで遅れ時間を短縮できます)。このようにして、最初のビデオの再生が終了した後、すでにラップされている2番目のMediaElementをすぐに表示することができます。

+1

コードスニペットはこれをより良い答えにします。 –

関連する問題