2012-01-26 20 views
0

私は、MediaElementをホストするカスタムWPFコントロールを持つ単純なWinFormsアプリケーション(32ビット用にコンパイルされた)を持っています。以下のコードは、Windows 7(64ビット)では完全にビデオを再生しますが、VistaおよびXPではMediaFailedイベントが「メディアのダウンロードに失敗しました」というメッセージでトリガーされます。Windows XPとVistaのMediaElement

`

this.MediaElement.LoadedBehavior = System.Windows.Controls.MediaState.Manual; 
this.MediaElement.UnloadedBehavior = System.Windows.Controls.MediaState.Manual; 
this.MediaElement.Source = new System.Uri(@"C:\Video\Video.mp4", System.UriKind.Absolute); 

this.MediaElement.Position = System.TimeSpan.FromSeconds(20); 
this.MediaElement.Play(); 

`

ビデオが細かく、3つのすべてのOSの上でWindows Media Playerで再生します。ビデオはH.264/MPEG-4/AVCでエンコードされています。これはDirectShowフィルタの問題でしょうか?そうでない場合は、これを実行するために何を調べることができますか?

答えて

0

DSフィルタの問題であることが保証されています。そのマシン上のコーデックがmp4ファイルを認識できない理由は何ですか?あなたはmp4ファイルで作業をdoesntの作業を行う機械にそれを比較するマシン上でGraphEditのを使用している場合

、あなたはフィルタ(コーデック)がロードされているかどうかではないでしょう

graphedit link

+0

感謝。今私はそれを試してみましょう。ちなみに、失敗についてRoutedEventArgsからより詳細な情報を抽出する方法を知っていますか? WPFで作業しているのは初めてのことです。私の最初の検索ではあまり効果がありませんでした。 –

+0

特定のフィルタを使用するようにMediaElementを制限する方法はありますか? –

+1

はいありますが、それほど簡単ではありません。 DirectShowフィルタグラフをコード内で作成する必要があります。これを行うには、mediaelementの代わりにwpfmediakitを使用する必要があります。 http://wpfmediakit.codeplex.com/。次に、フィルタグラフを作成するには、directshow.net http://sourceforge.net/projects/directshownet/が必要です。これは複雑な作業になります。または1台のマシンでアプリを実行している場合は、コーデック優先度ツールを使用して手動でコーデックの優先度を調整することができます(ここでGoogleが役立ちます) – Anton

関連する問題