0

设置如下:一个 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 之后会有很大的跳跃。从下面的诊断图像中,您可以看到使用情况几乎完全隔离在 Native 代码中。其他图表显示大约 2/3 在内核中和 1/3 在系统 IO 中。CPU 非常均匀地分布在所有内核上。

在此处输入图像描述

要点上的代码

我已经尝试了很多变体,但无论我尝试什么,一旦我达到 16 个通道,CPU 使用率就会非常稳定。我尝试在自己的线程中运行每个实例。那没什么区别。我真的很想了解这一点并找到一种降低 CPU 使用率的方法。我有一个使用这项技术的应用程序和一个需要超过 16 个通道的客户。

4

1 回答 1

0

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

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

不过,性能的使用应该仍然是线性的而不是指数的,所以可能存在错误。

于 2020-11-10T09:50:47.617 回答