我有一个WPF应用程序,其中使用MediaElement播放视频。 我不希望视频在加载时自动播放,因此将其LoadedBehavior设置为手动。
<MediaElement LoadedBehavior="Manual"
Source="foo.wmv"
MediaOpened="videoElement_MediaOpened" />
然而,我希望在加载时该元素展示视频的第一帧。有什么神奇的方法可以实现吗?
我有一个WPF应用程序,其中使用MediaElement播放视频。 我不希望视频在加载时自动播放,因此将其LoadedBehavior设置为手动。
<MediaElement LoadedBehavior="Manual"
Source="foo.wmv"
MediaOpened="videoElement_MediaOpened" />
然而,我希望在加载时该元素展示视频的第一帧。有什么神奇的方法可以实现吗?
ScrubbingEnabled="True"
然后在加载时设置一个事件
Loaded="Video1_Loaded"
在Video1_Load方法中添加以下内容:
Video1.Play();
Video1.Pause();
只有在调用play方法之后,才会渲染任何视频内容。因此,即使您将位置设置为第一帧之后,也不会呈现任何数据。
我认为MediaElement.ScrubbingEnabled属性是关键。
获取或设置一个值,该值表示 当暂停时,MediaElement是否会更新 搜索操作的帧。这是一个依赖属性。
我尝试了没有使用ScrubbingEnabled
的相同方法,但发现第一帧不会呈现。不确定这是否仅与我用于此的硬件有关。另一个需要记住的要点是,MediaElement的工作方式是,一旦调用了Play()
,您可能不会确切地在第一帧上Pause()
,因此您可能需要在调用Play()
之前降低流的音量,并在调用Pause()
之后重置。
<MediaElement Source="foo.wmv"
MediaOpened="videoElement_MediaOpened"
LoadedBehavior="Pause" ScrubbingEnabled="True" />
//Todo: Set your source
//if not stated in the xmal, you can still set this here.
Player.LoadedBehavior = MediaState.Manual;
//Turn scrubbing on
Player.ScrubbingEnabled = true;
Player.Pause();
Player.Position = TimeSpan.FromTicks(1);
MediaOpened
事件而不是Loaded
对我有用,只要在事件处理程序中播放然后暂停。 - RandomEngy