2016-07-15 232 views
0

我试图合成来自三个Rapsberry PI的三条流。Gstreamer videomixer非常低的帧率

当我加入两个流一起使用videomixer插件,我得到一个消息结尾:

管道:pipeline0/GstOSXVideoSink:osxvideosink0: 有可能是一个时间戳的问题,还是这台电脑是太慢。

奇怪的是,我的任务显示器只指示GST

随着三流约15%的CPU使用率,帧率变得不可用。我希望我的I7的MacBook能够处理这个没有问题....

这里是我用于混合,在这种情况下只有一个流(/水槽?)的代码。 谁能告诉我是否有明显的错误?或者我应该在哪里寻找瓶颈并改进它? 谢谢!

gst-launch-1.0 videomixer name=m sink_1::xpos=400 sink_2::ypos=300 ! autovideosink \ 
-v udpsrc port=9000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264'! rtph264depay ! video/x-h264,width=400,height=300,framerate=30/1 ! h264parse ! avdec_h264 ! videoconvert ! m. \ 
-v udpsrc port=9001 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! video/x-h264,width=400,height=300,framerate=30/1 ! h264parse ! avdec_h264 ! videoconvert ! m. \ 
-v udpsrc port=9002 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! video/x-h264,width=400,height=300,framerate=30/1 ! h264parse ! avdec_h264 ! videoconvert ! m. 

这是我用来从RPI相机发送流的代码。

raspivid -n -w 640 -h 480 -t 0 -o - \ 
| gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay \ 
config-interval=10 pt=96 ! udpsink host=192.168.1.3 port=9000 
+0

hm glvideomixer怎么样?我现在不确定OpenGL在RPI上的功能是怎样的 – nayana

+0

您可以将您正在使用的代码与连接到调音台的两个流粘贴起来吗?我没有在你的管道中看到任何'queue'元素。 – mpr

+0

@otopolsky视频混合器在Mac上,出于某种原因,glvideomixer没有出现在我的设置中。我已经搜索如何安装它,但我找不到任何有关它的信息。我一定在看错方向。你可以通过任何机会告诉我如何获得Mac上安装的glvideomixer(我已经安装了插件基础,好的,坏的,丑陋的和libav),但是当我做gst-inspect-1.0 –

回答

0

尝试为每个视频解码添加队列元素并将sync=false添加到视频接收器。现在

gst-launch-1.0 videomixer name=m sink_1::xpos=400 sink_2::ypos=300 ! videoconvert ! ximagesink sync=false \ 
udpsrc port=9000 ! application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! rtph264depay ! video/x-h264,width=400,height=300 ! h264parse ! avdec_h264 ! queue ! videoconvert ! m. \ 
udpsrc port=9001 ! application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! rtph264depay ! video/x-h264,width=400,height=300 ! h264parse ! avdec_h264 ! queue ! videoconvert ! m. \ 
udpsrc port=9002 ! application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! rtph264depay ! video/x-h264,width=400,height=300 ! h264parse ! avdec_h264 ! queue ! videoconvert ! m. 

我声明这将是我不能确定该视频将是适当平滑同步,但似乎看起来不错。

另外,在raspivid上,您可能需要将config-interval属性添加到rtph264pay元素。

raspivid -n -w 640 -h 480 -t 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 ! multiudpsink clients=192.168.1.3:9000,192.168.1.3:9001,192.168.1.3:9002 
+0

谢谢你的答复。该解决方案确实消除了图像中的干扰和关于丢帧的消息。不幸的是,它也给图像带来了巨大的延迟(约5秒),这对我的目的来说并不好。由于低延迟,我开始与gstreamer一起工作,这正是我所追求的。 –

+0

我抓住了一个Pi来测试。在接收端添加了队列,并在rtph264pay上设置了一个配置间隔,它现在看起来运行良好,并在任一端处理重新启动。 – mpr

+0

感谢您的反馈。添加你所建议的修改似乎确实可以提高性能。太好了! –