0

プロジェクトの一環として、2 つのビデオを同期する必要があります。私はPythonで実装しているので、gstreamerを使い始めました。

私のパイプラインは次のようになります

filesrc -> デコーダー -> queuev -> ビデオボックス

filesrc-1 -> デコーダー -> queuev1 -> videobox1

これらのビデオボックスは両方とも、このようにミキサーに結合されています

[ビデオボックス 1 と 2] -> ミキサー -> ffmpegcolorspace ->videosink

それらはすべて単一のパイプラインにあります。

しかし、ここでの問題は、コードを実行すると、実際には最適化されていないと思われる 174% の CPU 使用率になることです。これを減らす方法はありますか?並列パイプラインで 3 つのビデオを単純に実行しても、CPU 使用率が 14% になるからです。

また、ここにコードの一部をアップロードしています。

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

ストリームシンクロナイザーhttps://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-streamsynchronizer.htmlを使用できます

于 2016-08-12T16:05:28.070 に答える
0

Videomixer は CPU を使用してビデオをミキシングしています。とにかく、知るためには、プロファイラー (oprofile、sysprof) を実行して、どのコードが最も CPU を使用しているかを確認してください。また、関連する解像度と色空間、およびこれを実行するハードウェアについても何も言わなかった. したがって、予想外に遅いとは言い難いです。最後に、ビデオをミックスして同期する必要はなく、単一のパイプラインで実行するだけです。たとえば、ウィンドウなどの個別の描画領域にレンダリングするのは、アプリケーション次第です。

于 2012-09-26T09:02:20.960 に答える