2012-01-26 118 views
0

我有一个简单的WinForms应用程序(编译为32Bit)与一个自定义WPF控件,承载MediaElement。下面的代码可以在Windows 7(64位)下完美播放视频,但在Vista和XP下触发MediaFailed事件并显示消息“Media failed to download”。Windows XP和Vista上的MediaElement vs 7

`

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(); 

`

视频是罚款和在Windows Media Player中播放所有三个操作系统的。该视频是H.264/MPEG-4/AVC编码的。这可能是一个DirectShow过滤器的问题?如果没有,我还能看到什么才能让这个运行?

回答

0

它只是保证是一个DS过滤器问题。出于什么原因,该机器上的编解码器不能识别mp4文件。

如果使用不工作与你的MP4文件,并把它比作是不工作的机器在机器上GraphEdit中,你会或看到,如果过滤器(编解码器)加载不

graphedit link

+0

谢谢。我现在就试试看。顺便说一下,您是否知道如何从RoutedEventArgs中提取有关失败的更详细信息。这是我第一次与WPF合作,所以我最初的搜索并不富有成效。 – 2012-01-27 09:19:55

+0

有没有办法限制MediaElement使用特定的过滤器? – 2012-01-31 11:06:06

+1

是的,但它并不特别容易。您需要自己在代码中构建directshow过滤器图。要做到这一点,你需要使用wpfmediakit而不是mediaelement。 http://wpfmediakit.codeplex.com/。然后为了构建filtergraph,你需要directshow.net http://sourceforge.net/projects/directshownet/。这将是一项复杂的任务。或者如果您只是在一台机器上运行您的应用程序,那么您可以使用编解码器优先级工具手动调整编解码器优先级(谷歌将在此处帮助) – Anton 2012-01-31 22:08:43

相关问题