UWP Windows.Media.Playback - 停止/卸载剪辑

3
我正在编写一个包含MediaPlayer对象的UWP应用程序。我想编写一个停止按钮,以停止媒体并将媒体设置为黑色,但是我找不到一种简单的方法来实现它,除非加载一个短的“黑色”剪辑作为内部资源或通过合成器隐藏元素。
MediaPlayer没有停止函数,只有播放/暂停功能。而且,将媒体源设置为null仅会暂停播放,并在最后显示的帧上冻结,而不是变成黑色。
如果您有任何建议,将不胜感激。

有任何更新吗?问题解决了吗? - Sunteen Wu
我已经尝试使用你建议的MediaPlayerElement,但它也没有变黑,相反它会倒回到视频的第一帧并保持在那里。我想要一个变黑的原因是当一个新的视频开始时,我会隐藏在视频上面的一个层(例如ajpeg)。媒体播放器对象似乎有一些小问题,我正在努力解决它们,其中它报告已经开始播放新的视频文件(所以我基于该事件隐藏jpeg层),但在新的视频显示之前仍然会出现旧的视频文件的闪烁。 - Colin H
我建议使用MediaElement而不是MediaPlayerElement。请查看我的回复。 - Sunteen Wu
抱歉,我之前写错了,应该是MediaElement而不是MediaPlayerElement。上述发现都是基于您的建议。 - Colin H
2个回答

2
我最近遇到了一个相关问题,问题的核心是如何从MediaPlayerElement中卸载媒体。
如果在播放期间离开页面,MediaPlayerElement不会暂停或卸载正在进行的播放,因此用户将继续听到音频。 如果重新打开播放器页面,则将创建播放器控件的新实例,并且用户可能同时听到多个音轨(尽管这需要不同的媒体源)。 因此,在播放器的Unloaded事件处理程序、页面的Unloaded处理程序或OnNavigatingFrom/OnNavigatedFrom重写等某些地方卸载媒体非常重要。
无论如何,下面的代码可以停止并从MediaPlayerElement中卸载视频/剪辑/媒体。
MyMediaPlayerElement.MediaPlayer.Pause();
MyMediaPlayerElement.Source = null;

实际上,将一个null赋值给某一行可以很好地停止和卸载,但由于现在(2018年3月19日)MS文档似乎没有涵盖如何使源代码无效,因此我更喜欢在这里保留一个不必要的Pause()调用。


-1
如您所知,MediaPlayerElement 默认情况下没有停止方法。由于 MediaPlayerElement 是针对 Windows 10 版本 1607 新增的,而在早期版本中我们使用 MediaElement,因此您可以简单地使用 MediaElementMediaElement 具有 Stop 方法,调用该方法后,MediaElement 将显示黑屏并将媒体设置为开始状态,这正是您想要的。代码如下:
 <MediaElement x:Name="mediaelement" AreTransportControlsEnabled="True" Height="400" Width="400" AutoPlay="True" Source="http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4"></MediaElement>
 <Button x:Name="btnstop" Click='btnstop_Click' Content="stop"></Button>

代码后台:

private void btnstop_Click(object sender, RoutedEventArgs e)
{
    mediaelement.Stop();             
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接