Uwp 在播放多个MediaPlayer实例时,有没有办法减少CPU消耗?

Uwp 在播放多个MediaPlayer实例时,有没有办法减少CPU消耗?,uwp,media-player,gpu,cpu-usage,Uwp,Media Player,Gpu,Cpu Usage,我需要使用MediaPlayer和合成API同时播放15个轻视频 因此,我创建了一个简单的UWP应用程序: 公共密封部分类主页面 { 公共主页() { 初始化组件(); 已加载+=主页面_已加载; } 已加载私有void主页(对象发送方、路由目标) { var compositor=ElementCompositionPreview.GetElementVisual(MainGrid).compositor; var container=compositor.CreateContainerVis

我需要使用MediaPlayer合成API同时播放15个轻视频

因此,我创建了一个简单的UWP应用程序:

公共密封部分类主页面
{
公共主页()
{
初始化组件();
已加载+=主页面_已加载;
}
已加载私有void主页(对象发送方、路由目标)
{
var compositor=ElementCompositionPreview.GetElementVisual(MainGrid).compositor;
var container=compositor.CreateContainerVisual();
var k=0;
对于(int i=0;i<3;i++)
{
对于(int j=0;j<5;j++,k++)
{
var mediaPlayer=新的mediaPlayer
{
Source=新的MediaPlaybackItem(MediaSource.CreateFromUri)(新Uri($)毫秒-appx:///Assets/{k} .mp4),,
自动播放=真,
Ismute=true,
IsLoopingEnabled=true,
RealTimePlayback=true
};
mediaPlayer.SetSurfaceSize(新尺寸(512、512));
var surfaceBrush=compositor.CreateSurfaceBrush(mediaPlayer.GetSurface(compositor.CompositionSurface));
var sprite=compositor.CreateSpriteVisual();
sprite.Size=新矢量2(512);
sprite.Offset=新矢量3(512*j,512*i,0);
sprite.Brush=表面刷;
容器。儿童。插针(雪碧);
}
}
ElementCompositionPreview.SetElementChildVisual(主网格、容器);
}
}
CPU提高到25%,GPU提高到30%左右。(CPU-I74770,GPU-nVidia GTX 970)

GPU不应该承担所有的工作吗?有没有办法让CPU平静下来?或者有没有其他方法可以在UWP中播放许多视频,并且CPU使用率较低

所有视频均为512x512px 60fps h264*.mp4,每段约10MB

尝试使用15个VLC实例-结果100%占用CPU。还尝试了很多不同的编解码器-没有用

[编辑]

我用并发Vizalizer运行我的应用程序,发现98%用于同步事件,尽管硬件GPU解码器没有过载。有没有办法减少这些事件

[编辑]通过将所有视频替换到RAM,我的应用程序停止读取SSD,节省了10%的CPU:

    var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/{k}.mp4"));
    var reference = RandomAccessStreamReference.CreateFromFile(file);
现在我正在考虑如何避免RAM,并将视频直接传递到GPU内存


有可能吗?

播放15个视频时,仅25%的CPU使用率听起来不算太多。要知道,没有免费的午餐。@wilx CPU唯一做的事情就是调用nvwgf2umx.dll库中的WaitForSingleObjectEx和ReleaseSemaphore方法。看起来有点同步问题。我希望它使用100%的GPU,而不是CPU。你的机器上是否有阴影游戏功能?我最近遇到了一个非常类似的性能问题。@Sunius shadowplay被禁用。我试图卸载nVidia的所有内容,只重新安装一个驱动程序——CPU下降到15%,但视频开始冻结。