Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环时UWP MediaPlayer内存泄漏_C#_.net_Uwp_Media_H.265 - Fatal编程技术网

C# 循环时UWP MediaPlayer内存泄漏

C# 循环时UWP MediaPlayer内存泄漏,c#,.net,uwp,media,h.265,C#,.net,Uwp,Media,H.265,我们目前正在使用MediaPlayerElement在UWP应用程序中播放4K h.265视频作为背景。我们使用IsLoopingEnabled=true将MediaPlayer设置为无限循环。问题是,每次视频循环时,内存使用都在增加。如果禁用循环,则不会发生内存泄漏。当视频结束时,我们试图通过将位置重置为零来手动循环视频,但仍然会泄漏内存。我们还尝试调用System.GC.collect(),但也没有任何效果。 这是UWP错误还是我们遗漏了什么 编辑: 下面是我们正在使用的代码: MainPa

我们目前正在使用MediaPlayerElement在UWP应用程序中播放4K h.265视频作为背景。我们使用
IsLoopingEnabled=true
将MediaPlayer设置为无限循环。问题是,每次视频循环时,内存使用都在增加。如果禁用循环,则不会发生内存泄漏。当视频结束时,我们试图通过将位置重置为零来手动循环视频,但仍然会泄漏内存。我们还尝试调用System.GC.collect(),但也没有任何效果。 这是UWP错误还是我们遗漏了什么

编辑:

下面是我们正在使用的代码:

MainPage.xaml


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

WPF中总是有大量不同的媒体播放器元素。您正在使用teh。它的文档明确提到它仍处于开放测试阶段:

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

因此,完全有可能您刚刚发现了一个bug


据我所知,在MPE之前播放媒体的方法是故事板和组合。据我所知,MediaPlayer没有重复模式。那么一个。具有更深入WPF/UWP知识的人必须告诉您,目前哪一个是正确的。

如本文所述,这似乎是Windows 10中的一个错误。甚至内置的视频播放器“电影和电视”也有这个问题。这似乎只发生在h.265编解码器上。可能是解码器驱动程序错误或类似问题。

请向我们展示将视频加载/分配到媒体播放器和手动循环的实际代码。特别是,什么是视频源?是否将对视频的引用添加到任何集合中?如果GC.Collect()不执行任何操作,则可能是未更改的资源未清理,或者是引用内存泄漏,或者是真正的内存泄漏。但前两个更像是几个订单。我添加了一些我们正在使用的代码。视频源是一个h.265 mp4文件,没有什么特别的。我们没有向集合添加引用或任何内容谢谢,我已经尝试用MediaElement()替换MediaPlayerElement。该控件有一个名为
IsLooping
的属性,但即使使用此控件,内存使用量也在不断增加。我猜这是编解码器或媒体框架本身的问题?
<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>
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();

    [...]
}