Winforms 为什么16通道的libvlcsharp winform mosaic会占用大量CPU

Winforms 为什么16通道的libvlcsharp winform mosaic会占用大量CPU,winforms,libvlcsharp,Winforms,Libvlcsharp,设置如下:一个winform应用程序,visual studio 2019,创建16个videoview/mediaplayer实例,每个实例从一个多播摄像机中传输960 X 540 30fps的摄像机流 CPU i7 2.67GHz,GPU NV GTX 1650 GPU的解码加载率高达44%,与3d差不多。应用程序使用了惊人的75%到90%的CPU。它从一个测试运行跳到另一个测试运行。GPU非常稳定 这里还有一些有趣的信息。如果我用一个视频流运行这个应用程序的一个副本,CPU使用量大约是CP

设置如下:一个winform应用程序,visual studio 2019,创建16个videoview/mediaplayer实例,每个实例从一个多播摄像机中传输960 X 540 30fps的摄像机流

CPU i7 2.67GHz,GPU NV GTX 1650

GPU的解码加载率高达44%,与3d差不多。应用程序使用了惊人的75%到90%的CPU。它从一个测试运行跳到另一个测试运行。GPU非常稳定

这里还有一些有趣的信息。如果我用一个视频流运行这个应用程序的一个副本,CPU使用量大约是CPU的5/10%。如果我运行16个应用程序实例,每个实例使用大约4/10到8/10%的CPU。一旦我有16个视频流,GPU与上面相同(44%),CPU是正常的

在一个实例中,当添加摄像头时CPU使用率的增加不是线性的,它在9之后会有一个很大的飞跃。 从下面的诊断图像中,您可以看到使用几乎完全隔离在本机代码中。其他图表显示内核中约有2/3,系统IO中约有1/3。CPU分布在所有的核心上,非常均匀


我在这方面尝试了很多变化,但无论我尝试什么,一旦我达到16个通道,CPU使用率都是相当稳定的。我已经尝试在每个实例自己的线程中运行它们。这没什么区别。我真的很想了解这一点,并找到一种减少CPU使用的方法。我有一个使用这种技术的应用程序和一个需要16个以上频道的客户。

这可能是一个bug,需要在trac.videolan.org上报告,为VLC开发者提供一个最小的C/C++复制示例

请注意,比较播放16个VLC应用程序实例(16个进程)和播放16个流(1个进程)的1个基于LibVLC的应用程序实例并不完全是一个公平的比较


不过,perf的使用应该仍然是线性的,而不是指数型的,因此可能有一个bug。

如果没有完整的代码,很难说。请在GitHub上发布一个最小的示例。您是否在视频视图上收听任何活动?你通过什么命令行?你玩什么媒体?@cube45命令行是--verbose=2。唯一的事件是ApplicationExit。媒体是多播IP摄像机流登月船长1小时ago@cube45嵌入代码链接above@cube45因此,我将代码减少到最低限度,以产生CPU使用率。这就是我在Gist上发布的内容。只需要16次迭代循环,每次创建一个新的mediaplayer。视频视图不是必需的。此外,您还可以替换mp4或其他视频文件,同样的问题也会发生。此外,分辨率也不太重要,只是流的数量。您是否在另一台电脑上尝试过,使用另一个GPU品牌?不知怎的,我怀疑libvlc有缺陷。如果你找不到答案,我建议你在vlc的bug追踪器上开一张罚单。我感谢大家对这个问题的关注。非常感谢。在将来的某个时候,当我有时间的时候,我会提高我的C语言技能,并创建一个测试工具来演示(或不演示)这个问题。现在,我只想让这个问题没有答案。也谢谢你关于比较的注释。