UWP MediaPlayerElement - 海报保持原样直到播放
UWP MediaPlayerElement - Poster Stay Put Until Played
UWP MediaPlayerElement 同时具有 PosterSource 和 VideoSource。这个问题主要是关于在播放之前保持 PosterSource 显示。
Docs 状态:
- 未设置有效源时。例如,未设置源,
源设置为 Null,或者源无效(如
MediaFailed 事件触发)。
- 正在加载媒体。例如,一个
已设置有效源,但 MediaOpened 事件尚未触发。
- 当媒体流式传输到另一台设备时。
- 当媒体仅为音频时。
我要确定的是,即使在媒体已完成下载且自动播放关闭时如何保持海报图像显示。可悲的是,第一帧+是黑屏。所以我想让海报显示直到按下播放按钮。
想法?
编辑:
Faywang 帮了大忙。
除了他的评论,我还做了以下事情:
private void PlayPauseButton_EnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var button = (sender as AppBarButton);
if(!(bool)e.newValue)
{
button.IsEnabled = true;
}
}
如果你想保留海报直到你点击播放按钮,你可以设置 PosterSource 并且首先不要将 Source 设置为 MediaPlayerElement。然后监听播放按钮的点击事件,当事件触发时,可以在该事件中设置Source并播放。
另外,通过测试,当您明确设置了自动播放并且没有设置源时,播放按钮将被禁用。但是如果你不设置自动播放,播放按钮将被启用,所以最好删除这段代码AutoPlay="False"
。
如果想监听播放按钮的点击事件,可以获取MediaTransportControls的默认样式,订阅播放按钮的点击事件。你可以去generic.xaml文件获取MediaTransportControls的默认样式。在默认样式中,有一个AppBarButton,名称为PlayPauseButton,代表播放和暂停按钮,所以可以在里面添加点击事件,当触发事件,设置源,play/pauce 视频。
例如:
.xaml:
<Page.Resources>
<Style TargetType="MediaTransportControls" x:Key="MyStyle">
......
<Setter Property="Template">
......
<AppBarButton x:Name='PlayPauseButton' Style='{StaticResource AppBarButtonStyle}'
Click="PlayPauseButton_Click"
MediaTransportControlsHelper.DropoutOrder='23'>
<AppBarButton.Icon>
<SymbolIcon x:Name="PlayPauseSymbol" Symbol="Play" />
</AppBarButton.Icon>
</AppBarButton>
......
</Setter>
</Style>
</Page.Resources>
<MediaPlayerElement x:Name="mediaSimple" Width="400" PosterSource="Assets/3.jpg" AreTransportControlsEnabled="True">
<MediaPlayerElement.TransportControls>
<MediaTransportControls Style="{StaticResource MyStyle}"></MediaTransportControls>
</MediaPlayerElement.TransportControls>
</MediaPlayerElement>
.cs:
private void PlayPauseButton_Click(object sender, RoutedEventArgs e)
{
SymbolIcon symbol = (sender as AppBarButton).Icon as SymbolIcon;
if (symbol.Symbol == Symbol.Pause)
{
mediaSimple.MediaPlayer.Pause();
}
else
{
if (mediaSimple.Source == null)
{
mediaSimple.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/fishes.wmv"));
}
mediaSimple.MediaPlayer.Play();
}
}
UWP MediaPlayerElement 同时具有 PosterSource 和 VideoSource。这个问题主要是关于在播放之前保持 PosterSource 显示。
Docs 状态:
- 未设置有效源时。例如,未设置源, 源设置为 Null,或者源无效(如 MediaFailed 事件触发)。
- 正在加载媒体。例如,一个 已设置有效源,但 MediaOpened 事件尚未触发。
- 当媒体流式传输到另一台设备时。
- 当媒体仅为音频时。
我要确定的是,即使在媒体已完成下载且自动播放关闭时如何保持海报图像显示。可悲的是,第一帧+是黑屏。所以我想让海报显示直到按下播放按钮。
想法?
编辑:
Faywang 帮了大忙。
除了他的评论,我还做了以下事情:
private void PlayPauseButton_EnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var button = (sender as AppBarButton);
if(!(bool)e.newValue)
{
button.IsEnabled = true;
}
}
如果你想保留海报直到你点击播放按钮,你可以设置 PosterSource 并且首先不要将 Source 设置为 MediaPlayerElement。然后监听播放按钮的点击事件,当事件触发时,可以在该事件中设置Source并播放。
另外,通过测试,当您明确设置了自动播放并且没有设置源时,播放按钮将被禁用。但是如果你不设置自动播放,播放按钮将被启用,所以最好删除这段代码AutoPlay="False"
。
如果想监听播放按钮的点击事件,可以获取MediaTransportControls的默认样式,订阅播放按钮的点击事件。你可以去generic.xaml文件获取MediaTransportControls的默认样式。在默认样式中,有一个AppBarButton,名称为PlayPauseButton,代表播放和暂停按钮,所以可以在里面添加点击事件,当触发事件,设置源,play/pauce 视频。
例如:
.xaml:
<Page.Resources>
<Style TargetType="MediaTransportControls" x:Key="MyStyle">
......
<Setter Property="Template">
......
<AppBarButton x:Name='PlayPauseButton' Style='{StaticResource AppBarButtonStyle}'
Click="PlayPauseButton_Click"
MediaTransportControlsHelper.DropoutOrder='23'>
<AppBarButton.Icon>
<SymbolIcon x:Name="PlayPauseSymbol" Symbol="Play" />
</AppBarButton.Icon>
</AppBarButton>
......
</Setter>
</Style>
</Page.Resources>
<MediaPlayerElement x:Name="mediaSimple" Width="400" PosterSource="Assets/3.jpg" AreTransportControlsEnabled="True">
<MediaPlayerElement.TransportControls>
<MediaTransportControls Style="{StaticResource MyStyle}"></MediaTransportControls>
</MediaPlayerElement.TransportControls>
</MediaPlayerElement>
.cs:
private void PlayPauseButton_Click(object sender, RoutedEventArgs e)
{
SymbolIcon symbol = (sender as AppBarButton).Icon as SymbolIcon;
if (symbol.Symbol == Symbol.Pause)
{
mediaSimple.MediaPlayer.Pause();
}
else
{
if (mediaSimple.Source == null)
{
mediaSimple.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/fishes.wmv"));
}
mediaSimple.MediaPlayer.Play();
}
}