gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:41:51 29 4
gpt4 key购买 nike

我想使用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com