MediaPlayerElement在导航到另一帧后正在播放音频。如果我再次导航到此帧,我可以听到两个音频示例,一个来自当前播放视频的音频,另一个来自上次导航到此帧时的音频。如何在导航到另一帧后停止MediaPlayerElement?
供参考:
框架的XAML部分的完整代码
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/MediaPlayerDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
<Grid Background="Transparent">
<MediaPlayerElement Name="YoutubePlayer" MaxWidth="640" MaxHeight="360" AreTransportControlsEnabled="True">
<MediaPlayerElement.TransportControls>
<video:CustomMediaTransportControls x:Name="CustomMediaControl" IsSkipBackwardButtonVisible="True" IsSkipForwardButtonVisible="True" IsSkipBackwardEnabled="True" IsSkipForwardEnabled="True" IsFullWindowButtonVisible="True" IsFullWindowEnabled="True" QualityChanged="CustomMediaControl_QualityChangedAsync"/>
</MediaPlayerElement.TransportControls>
</MediaPlayerElement>
</Grid>
框架的C#部分的完整代码
public sealed partial class VideosPage : Page
{
public VideosPage()
{
this.InitializeComponent();
}
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
YoutubePlayer.MediaPlayer.Dispose();
}
public async Task setVideoSourceAsync(YouTubeQuality videoQuality)
{
try
{
var youtubeUrl = await YouTube.GetVideoUriAsync("QTYVJhy04rs", YouTubeQuality.Quality144P, videoQuality);
YoutubePlayer.Source = MediaSource.CreateFromUri(youtubeUrl.Uri);
YoutubePlayer.AutoPlay = true;
}
catch (Exception e)
{
//await setVideoSourceAsync();
}
}
private async void Page_LoadedAsync(object sender, RoutedEventArgs e)
{
if (ApplicationView.GetForCurrentView().IsViewModeSupported(ApplicationViewMode.CompactOverlay))
{
CustomMediaControl.IsCompactOverlayButtonVisible = true;
}
await setVideoSourceAsync(YouTubeQuality.Quality360P);
}
private async void CustomMediaControl_QualityChangedAsync(object sender, QualityChangedEventArgs e)
{
await setVideoSourceAsync(e.NewQuality);
}
}
2条答案
按热度按时间uelo1irk1#
根据您希望在导航离开Page时发生的情况,您可以例如通过将此方法添加到MediaPlayer所在页面中的代码隐藏来处置MediaPlayer:
您可能还想停止它并在导航回Page时继续,因此您可能应该重写
void OnNavigatedTo(NavigationEventArgs e)
方法。mqkwyuun2#
我也遇到过这个问题。接受的答案会导致一个未处理的异常,即使有await。下面是这里提供的示例代码中的覆盖处理程序应该是什么样子。