Wpf 使用MediaElement播放时的视觉瑕疵。mp4
我想用WPF的Wpf 使用MediaElement播放时的视觉瑕疵。mp4,wpf,video,mp4,mediaelement,Wpf,Video,Mp4,Mediaelement,我想用WPF的MediaElement控件播放一些视频,所以作为起点,我从WPF4 Unreleased(如果您想查找,请参阅第661页)中获取了一些XAML代码示例 玩 暂停 简历 我尝试了两个不同的视频片段,一个是从youtube上拍摄的,另一个是用Twitch.tv流保存的。然而,尽管WMP和VLC都可以完美地播放这两个视频,但上面的XAML示例无法正确播放Livestreamer中的视频(存在大量视觉瑕疵,请参见下文) 奇怪的是根据MSDN上的答案: 2,如果提供WMP12,WPF
MediaElement
控件播放一些视频,所以作为起点,我从WPF4 Unreleased(如果您想查找,请参阅第661页)中获取了一些XAML代码示例
玩
暂停
简历
我尝试了两个不同的视频片段,一个是从youtube上拍摄的,另一个是用Twitch.tv流保存的。然而,尽管WMP和VLC都可以完美地播放这两个视频,但上面的XAML示例无法正确播放Livestreamer中的视频(存在大量视觉瑕疵,请参见下文)
奇怪的是根据MSDN上的答案:
2,如果提供WMP12,WPF mediaElement可以在不使用任何编解码器包的情况下播放mp4
说到编解码器,我使用VLC查找了这两个视频的编解码器信息:
Youtube:
- 编解码器:H264-MPEG-4AVC(第10部分)(avc1)
- 分辨率:1920x1080
- 显示分辨率:1920x1080
- 帧速率:29.970029
- 编解码器:H264-MPEG-4 AVC(第10部分)(H264)
MediaElement
应该具有与WMP完全相同的行为
tl;博士使用WPF的MediaElement播放视频的正确方式是什么?(如果不是上面的一个)
附言:如果你一定要知道,我的最终目标是播放twitch.tv上的流,并对视频帧进行一些视觉分析(使用OpenCV或其他库)
p.p.S:如果我使用ffmpeg重新渲染/重新编码/重新保存视频,请使用:
ffmpeg.exe-I Out.mp4 Out\u fixed.mp4
,新版本将正常播放。不知道这是否有用。我有一个MediaElement应用程序,可以在主显示器上播放MP4(AVC1)文件。但是,当我将应用程序窗口从主显示器拖到辅助显示器(扩展桌面)时,视频会冻结,无法播放。MediaElement抛出一个“Error:Exception from HRESULT:0xC00D11B1”,我认为这是编解码器死机。我已安装K-Lite编解码器包,因此MediaElement可能正在使用与您的应用程序不同的编解码器
根据此MicroSoft页面,AVC应能工作:
支持的媒体格式、协议和日志字段
FYI
0xC00D11B1
isNS_E_WMP_文件打开失败
,Windows Media Player在播放文件时遇到问题。这与我的问题不同。视频会播放,但会产生伪影(我可以在显示器上拖动它)。
<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>