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

标签 wpf video mp4 mediaelement

我想使用 WPF 的 MediaElement 控件播放一些视频,因此作为起点,我从 WPF4 Unleashed(第 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>

我用 2 个不同的视频尝试了这个片段,一个是我从 youtube 上截取的,另一个是我使用 livestreamer 保存的(来自 Twitch.tv 流)。然而,虽然 WMP 和 VLC 都可以完美播放这两个视频,但上面的 XAML 示例无法正确播放来自 Livestreamer 的视频(有很多视觉伪影,见下文)。

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

奇怪的是根据 MSDN 上的答案(this question):

2, If WMP12 is provided, WPF mediaElement can play mp4 without any Codec Packs.

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

优酷:

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

主播:

  • 编解码器: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,新版本将正常播放.不知道是否有帮助。

最佳答案

我有一个 MediaElement 应用程序,可以在主显示器上播放 MP4 (AVC1) 文件。但是,当我将应用程序窗口从主显示器拖动到辅助显示器(扩展桌面)时,视频会卡住并且无法播放。 MediaElement 抛出“错误:来自 HRESULT 的异常:0xC00D11B1”,我认为这是编解码器死亡。我安装了 K-Lite 编解码器包,因此 MediaElement 可能使用与您的应用程序不同的编解码器。

根据这个 MicroSoft 页面,AVC 应该工作: 支持的媒体格式、协议(protocol)和日志字段 http://msdn.microsoft.com/en-us/library/cc189080%28v=vs.95%29.aspx

关于wpf - 使用 MediaElement 播放 .mp4 时的视觉瑕疵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421024/

相关文章:

video - 如何在编码期间暂停和恢复ffmpeg?

internet-explorer - ffmpeg mp4 使用 Internet Explorer 在视频中搜索后显示模糊的帧

ios - 在没有 MOOV Atom 的情况下识别 MDAT Atom 中的音频样本

c# - DependencyProperty 未在 NotifyCollectionChanged 事件上通知 UI

c# - 如何使在 wpf 窗口中运行的应用程序忽略单击或鼠标事件

c# - WPF 代码隐藏等效项

image - thumbnailImageAtTime : now deprecated - What's the alternative?

video - 透明.mov视频转换成具有透明背景ffmpeg的png序列

wordpress - 如何禁用 mp4 的 gzip 压缩

c# - 如何让 Flyout 宽度适应应用程序宽度?