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

时间:2014-01-29 02:40:36

标签: wpf video mp4 mediaelement

我希望使用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的视频(有很多视觉文物,见下文)。

Fixed version of the video on the left, Original on the right

根据MSDN上的答案(this question),有什么奇怪之处:<​​/ p>

  

2,如果提供了WMP12,WPF mediaElement可以播放没有任何编解码器包的mp4。

说到编解码器,我使用VLC查找了两个视频的编解码器信息:

的Youtube:

  • 编解码器:H264 - MPEG-4 AVC(第10部分)(avc1)
  • 分辨率:1920x1080
  • 显示分辨率:1920x1080
  • 帧率:29.970029

Livestreamer:

  • 编解码器:H264 - MPEG-4 AVC(第10部分)(h264)

现在这应该不重要,因为我应该理解MediaElement具有与WMP完全相同的行为。

TL;博士;使用WPF的MediaElement播放视频的正确方法是什么? (如果不是上面那个)

P.S:如果你必须知道,我的最终目标是从twitch.tv播放流,并对视频帧进行一些可视化分析(使用OpenCV或其他一些库)。

P.P.S:如果我使用ffmpeg使用:ffmpeg.exe -i Out.mp4 Out_fixed.mp4重新渲染/重新编码/重新保存视频,则新版本可以正常播放。不知道这是否有帮助。

1 个答案:

答案 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

相关问题