我希望使用WPF的MediaElement
控件播放一些视频,所以作为一个起点,我从 WPF4 Unleashed 中获取了一些示例XAML代码(如果要查找它,请参阅第661页) )。
<Grid>
<MediaElement Name="Video" />
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom">
<Button Name="PlayButton" Background="#55FFFFFF" Height="40">Play</Button>
<Button Name="PauseButton" Background="#55FFFFFF" Height="40">Pause</Button>
<Button Name="ResumeButton" Background="#55FFFFFF" Height="40">Resume</Button>
</StackPanel>
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="PlayButton">
<EventTrigger.Actions>
<BeginStoryboard Name="BeginStoryBoard">
<Storyboard>
<MediaTimeline Storyboard.TargetName="Video" Source="Path/To/Out.mp4"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.Click" SourceName="PauseButton">
<EventTrigger.Actions>
<PauseStoryboard BeginStoryboardName="BeginStoryBoard" />
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.Click" SourceName="ResumeButton">
<EventTrigger.Actions>
<ResumeStoryboard BeginStoryboardName="BeginStoryBoard" />
</EventTrigger.Actions>
</EventTrigger>
</Grid.Triggers>
</Grid>
我尝试了两个不同的视频片段,一个是我从youtube拍摄的,另一个是我使用livestreamer(来自Twitch.tv流)保存的。然而,虽然WMP和VLC都可以完美地播放两个视频,但上面的XAML示例无法正常播放Livestreamer的视频(有很多视觉文物,见下文)。
根据MSDN上的答案(this question),有什么奇怪之处:</ p>
2,如果提供了WMP12,WPF mediaElement可以播放没有任何编解码器包的mp4。
说到编解码器,我使用VLC查找了两个视频的编解码器信息:
的Youtube:
Livestreamer:
现在这应该不重要,因为我应该理解MediaElement
具有与WMP完全相同的行为。
TL;博士;使用WPF的MediaElement播放视频的正确方法是什么? (如果不是上面那个)
P.S:如果你必须知道,我的最终目标是从twitch.tv播放流,并对视频帧进行一些可视化分析(使用OpenCV或其他一些库)。
P.P.S:如果我使用ffmpeg使用:ffmpeg.exe -i Out.mp4 Out_fixed.mp4
重新渲染/重新编码/重新保存视频,则新版本可以正常播放。不知道这是否有帮助。
答案 0 :(得分:-1)
我有一个MediaElement应用程序,它将在主显示屏上播放MP4(AVC1)文件。但是,当我将应用程序窗口从主显示器拖动到辅助显示器(扩展桌面)时,视频会冻结而无法播放。 MediaElement抛出一个“错误:来自HRESULT的异常:0xC00D11B1”,我认为这是编解码器死亡。我安装了K-Lite编解码器包,因此MediaElement可能正在使用与您的应用程序不同的编解码器。
根据MicroSoft的这个页面,AVC应该工作: 支持的媒体格式,协议和日志字段 http://msdn.microsoft.com/en-us/library/cc189080%28v=vs.95%29.aspx