Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 使用MediaElement播放时的视觉瑕疵。mp4_Wpf_Video_Mp4_Mediaelement - Fatal编程技术网

Wpf 使用MediaElement播放时的视觉瑕疵。mp4

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

我想用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
Livestreamer:

  • 编解码器: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
is
NS_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>