循环时UWP MediaPlayer上的内存泄漏

我们当前正在使用MediaPlayerElement在UWP应用中作为背景播放4K h.265视频。我们已经使用IsLoopingEnabled = true将MediaPlayer设置为无限循环。问题是,每次视频循环时,内存使用量都会增加。如果禁用循环,则不会发生内存泄漏。我们尝试通过在视频播放结束时将位置重置为零来手动循环播放视频,但仍然会泄漏内存。我们还尝试调用System.GC.collect(),但也无济于事。 这是UWP错误还是我们遗漏了一些东西?

编辑:

这是我们正在使用的代码:

MainPage.xaml

<Page
x:Class="MyProject.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="using:MyApp.Controls"
xmlns:xaml="using:microsoft.Graphics.Canvas.UI.Xaml"
mc:Ignorable="d"
Background="Black" Loaded="MainPage_OnLoaded" Unloaded="MainPage_OnUnloaded">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{StaticResource AppBrushNewBlue1}">
    <MediaPlayerElement Name="bgMovie" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AreTransportControlsEnabled="False" ></MediaPlayerElement>
    <Canvas Name="mainCanvas" Manipulationmode="None" Background="Transparent">
    </Canvas> 
</Grid>

MainPage.xaml.cs

private MediaSource ms;
private async void MainPage_OnLoaded(object sender,RoutedEventArgs e)
{
    ms = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/bg_animation_V2.mp4"));
    bgMovie.Source = ms;
    bgMovie.MediaPlayer.IsLoopingEnabled = true;
    bgMovie.MediaPlayer.Play();

    [...]
}

我们没有对MediaSource或mediaPlayer本身做更多的事情。当我们禁用IsLoopingEnabled时,不会再发生内存泄漏。

lipanhaoran 回答:循环时UWP MediaPlayer上的内存泄漏

如此处https://stackoverflow.com/a/54947557/1018232所述,这似乎是Windows 10中的错误。即使内置的视频播放器“电影和电视”也存在此问题。看来这仅发生在h.265编解码器上。也许是解码器驱动程序错误或类似的东西。

,

在WPF中,总是有很多令人困惑的不同Media Player元素。您正在使用MediaPlayerElement。它的文档中明确提到它仍处于开放Beta阶段:

  

此控件当前可作为Windows 10版本1903及更高版本的开发人员预览使用。尽管我们鼓励您现在在自己的原型代码中尝试该控件,但我们不建议您现在在生产代码中使用它。有关更多信息,请参见XAML Islands功能路线图。如果您对此控件有反馈,请在Microsoft.Toolkit.Win32存储库中创建一个新问题,并在此处保留您的评论。如果您希望私下提交反馈,可以将其发送到XamlIslandsFeedback@microsoft.com。

所以您完全有可能发现了一个错误。

据我所知,在MPE之前播放媒体的方法是情节提要和MediaPlayer/MediaElement组合。据我所知,MediaPlayer没有重复模式。因此event will have to do。拥有更深入的WPF / UWP知识的人将不得不告诉您,目前暂时只有一种是正确的。

本文链接:https://www.f2er.com/3006006.html

大家都在问