如何清除MediaPlayer';UWP应用程序中的缓存?

如何清除MediaPlayer';UWP应用程序中的缓存?,uwp,Uwp,在我的UWP应用程序中,我有一个MediaPlayer。当切换其源时,我发现之前的视频有一些残片。要解决这个问题,一个解决方案是在切换时清除MediaPlayer的缓存。但是我没有找到这种接口 更多 我用下面的GitHub链接做了一个演示。我使用Nico的建议调用MediaSource的Dispose()函数。但正如您所看到的,当在MainPage和VideoPage1之间切换时,视频剩余片段问题仍然存在 更多2 我粘贴我的代码如下。测试应该通过在主页和视频页面1之间来回切换来完成。然后你可以看

在我的UWP应用程序中,我有一个MediaPlayer。当切换其源时,我发现之前的视频有一些残片。要解决这个问题,一个解决方案是在切换时清除MediaPlayer的缓存。但是我没有找到这种接口

更多 我用下面的GitHub链接做了一个演示。我使用Nico的建议调用MediaSource的Dispose()函数。但正如您所看到的,当在MainPage和VideoPage1之间切换时,视频剩余片段问题仍然存在

更多2 我粘贴我的代码如下。测试应该通过在主页和视频页面1之间来回切换来完成。然后你可以看到视频残片现象

但正如我所评论的,如果我们设置两次源,那么vide剩余片段现象就不存在了,为什么

还有其他官方解决方案吗

mMediaPlayer.Source = ms;
mMediaPlayer.Source = ms;
测试代码:

public sealed partial class VideoPage1 : Page
{
    MediaPlayer mMediaPlayer;
    MediaSource ms;
    public static int count;

    public VideoPage1()
    {
        this.InitializeComponent();
        NavigationCacheMode = NavigationCacheMode.Enabled;

        mMediaPlayer = new MediaPlayer();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        count++;

        if (count % 2 == 0)
            ms = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/1.mp4"));
        else
            ms = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/2.mp4"));

        // One solution: if we set Source twice, then 
        // the vide residual fragment phenomenon does not exist, but why?
        // mMediaPlayer.Source = ms;
        mMediaPlayer.Source = ms;
        mMediaPlayer.Play();

        VideoObj.SetMediaPlayer(mMediaPlayer);
    }

    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        mMediaPlayer.Pause();
        ms.Dispose();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Frame rootFrame = Window.Current.Content as Frame;
        rootFrame.Navigate(typeof(MainPage));
    }
}

如何在UWP应用程序中清除MediaPlayer的缓存


请检查这份文件。包含用于释放或重置非托管资源的。在切换到其他源之前,请手动调用它。它将清除上一个视频的剩余片段。

要清除中间播放器,您应该清除args中的ResourceByteRangeOffset和ResourceByteRangeLength。此文档帮助您

嗨,Nico,感谢您的回复!请查看我的主要帖子。我采用了你的方法,但没能解决这个问题。并提供了一个github演示代码。