如何找到Gstreamer瓶颈?

如何找到Gstreamer瓶颈?,gstreamer,Gstreamer,我有一个glvideomixer接收器,可以在4x4矩阵阵列中同时显示16个720p-60Hz视频。当所有16个视频源都来自16个不同的“h264主配置文件”文件时,所有视频都运行平稳,但当我从4个抓取卡(4 x 4HDMI输入端口设置为1280x720-60Hz,与视频文件相同)获取视频时,输出会变得断断续续 管道非常简单: glvideomixer(name=vmix) ksvideosrc(device-index=0...15)->capsfilter(video/x-raw,fo

我有一个glvideomixer接收器,可以在4x4矩阵阵列中同时显示16个720p-60Hz视频。当所有16个视频源都来自16个不同的“h264主配置文件”文件时,所有视频都运行平稳,但当我从4个抓取卡(4 x 4HDMI输入端口设置为1280x720-60Hz,与视频文件相同)获取视频时,输出会变得断断续续

管道非常简单:

glvideomixer(name=vmix)
ksvideosrc(device-index=0...15)->capsfilter(video/x-raw,format=YV12,framerate=60/1,height=720,width=1280)->vmix.sink_0...15
注意:ksvideosrc元素仅在Windows平台上可用

AFAIK管道是基于GL的,因此当glvideomixer将所有视频流视为GL纹理时,所有视频流都隐式上载到GL上下文。我是对的

但我不明白为什么当我使用16个视频文件时,所有文件都能顺利运行,即使在理论上,这个过程更复杂,因为计算机必须在将这些流发送到GPU之前对其进行解码,而当我使用抓取卡时,所有输出都会断断续续

我非常确定卡片的流格式是原始的YV12,因为我设置了capsfilter元素来显式地选择该流。这里是抓取器的链接:

我认为PCIe总线中存在瓶颈,但我不确定,因为GPU是AMD FirePro W7100,运行速度为16倍,4个抓取卡是4倍PCIe,运行速度为4倍

需要注意的是,从抓取器发出的多达13个视频信号都能顺利运行。再加一个,就会出现口吃

那么:如何知道瓶颈在哪里

非常感谢

编辑:

钻机为:

  • MB:Asus x99豪华USB 3.1:
  • CPU:Hexacore i7-5930K具有40个PCIe通道:
  • RAM:Kingston Hyperx PC4 21300 HX426C15FBK2/8双通道设置:
  • GPU:AMd FirePro W7100 8Gb GDDR5 256位:
  • 硬盘驱动器:金斯顿SSD Now V300:

如果将帧率调低至30或降低分辨率,管道是否工作?是的,如果我在ksvideosrc和混音器接收器之间设置上限,管道是否工作。正如我所说的,如果我使用源文件而不是抓取程序,那么管道将完美地工作。我不能降低FPS或分辨率,因为这是一个明确的要求。有什么想法吗?嗯,如果你真的达到了硬件的极限,那肯定会很有趣。主板是什么?我听说Skylake主板应该能够移动更多的数据。如何获得输出的最终要求是什么?它们会以本机分辨率显示吗?装备是:-MB:Asus x99豪华USB 3.1:-CPU:Hexacore i7-5930K Haswell 40 PCIe通道:-RAM:Kingston Hyperx PC4 21300 HX426C15FBK2/8双通道设置:-GPU:AMd FirePro W7100 8Gb GDDR5 256位:-HDD:Kingston SSD Now V300:glvideomixer的总分辨率为3840x2160,因此,阵列上显示的每个视频都有960x540像素。因此,我有一个软件videoscaler过滤器,它将抓取器获取的每个信号从HD转换为960x540,然后上传到GL上下文。此软件过滤器用于两个管道:一个来自文件,另一个来自抓取器。第一个仅使用20%的CPU对所有16个视频文件进行解码和缩小,同时GPU达到80%的使用率来显示合成的4k最终图像。正如我所说:第一个运行平稳,第二个口吃。