0

As a part of my project, I will have to synchronize 2 videos. Since i am implementing it in python, i started using gstreamer.

My pipeline looks like this

filesrc -> decoder-> queuev -> videobox

filesrc-1 -> decoder-> queuev1 -> videobox1

both of these videobox is joined to mixer like this

[videobox 1 and 2 ] -> mixer -> ffmpegcolorspace ->videosink

All of them in a single pipeline.

But problem here is when i run the code , i get 174% cpu usage which i think is not really optimized. Is there any way to reduce this? because even if i simply run 3 videos in parallel pipelines i get 14% cpu usage.

I am also uploading part of my code here.

self.pipeline = gst.Pipeline('pipleline')
self.filesrc = gst.element_factory_make("filesrc", "filesrc")

self.filesrc.set_property('location', videoloc1)
self.pipeline.add(self.filesrc)

self.decode = gst.element_factory_make("decodebin2", "decode")
self.pipeline.add(self.decode)

self.queuev = gst.element_factory_make("queue", "queuev")
self.pipeline.add(self.queuev)

self.video = gst.element_factory_make("autovideosink", "video")
self.pipeline.add(self.video)

self.filesrc_2 = gst.element_factory_make("filesrc", "filesrc2")
self.filesrc_2.set_property('location', videoloc2) 
self.pipeline.add(self.filesrc_2)

self.decode_2 = gst.element_factory_make("decodebin2", "decode_2")
self.pipeline.add(self.decode_2)

self.queuev_2 = gst.element_factory_make("queue", "queuev_2")
self.pipeline.add(self.queuev_2)

self.mixer = gst.element_factory_make("videomixer2", "mixer")
self.pipeline.add(self.mixer)

self.videobox_1 = gst.element_factory_make("videobox", "videobox_1")
self.pipeline.add(self.videobox_1)

self.videobox_2 = gst.element_factory_make("videobox", "videobox_2")
self.pipeline.add(self.videobox_2)

self.ffmpeg1 = gst.element_factory_make("ffmpegcolorspace", "ffmpeg1")
self.pipeline.add(self.ffmpeg1)

gst.element_link_many(self.filesrc,self.decode)
gst.element_link_many(self.filesrc_2,self.decode_2)  
gst.element_link_many(self.queuev,self.videobox_1,self.mixer,self.ffmpeg1,self.video)                                          
gst.element_link_many(self.queuev_2,self.videobox_2,self.mixer)
4

2 回答 2

0

Videomixer 正在使用 cpu 来混合视频。无论如何,为了知道,运行一个分析器(oprofile,sysprof)来查看哪些代码使用最多的 cpu。此外,您没有就所涉及的分辨率和色彩空间以及您运行它的硬件发表任何意见。因此,很难说它是否出乎意料地慢。最后,你不需要混合视频来同步它们,你可以在一个管道中运行它们。例如,您的应用程序可以在窗口或其他任何地方渲染到单独的绘图区域。

于 2012-09-26T09:02:20.960 回答