2016-03-18 35 views
0

我想GStreamer的1.6.3爲playbin

創建playbin定製videosink的Gstreamer定製videosink最終的想法是讓videosink裏面的一些videomixer要能夠做到..東西。

目前,我想簡單地創建一個自定義Bin,它包含一個videosink。

代碼,此刻的相關部分:

def get_videomix_bin(self): 
    mix_bin = Gst.Bin.new('sink') 

    sink = Gst.ElementFactory.make('glimagesink') 
    gp = Gst.GhostPad.new('vs', sink.get_static_pad('sink')) 
    mix_bin.add(sink) 

    mix_bin.add_pad(gp) 

    return mix_bin 


def get_pipeline(self, videosink): 
    """A basic playbin pipeline pipeline""" 
    self.pipeline = Gst.ElementFactory.make('playbin') 
    videosink = self.get_videomix_bin() 

    self.pipeline.set_property('video-sink', videosink) 

    self.fireEvent('pipeline-created') 

這段代碼是我不能發佈整個一個更大的軟件的一部分。但是,如果我將self.pipeline.set_property('video-sink',videosink)部分註釋掉,它就可以工作,所以我傾向於認爲問題是存在的。

它......好吧,它基本上不工作。管道不會啓動。

在GST_DEBUG = 2我得到這樣的警告

0:00:00.758103367 15560 0x7f81000050a0 WARN   uridecodebin gsturidecodebin.c:939:unknown_type_cb:<uridecodebin0> warning: No decoder available for type 'video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3.1, profile=(string)main, codec_data=(buffer)014d401fffe1001c674d401fe8802802dd80b501010140000003004000000c83c60c448001000468ebaf20, width=(int)1280, height=(int)720, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, parsed=(boolean)true'. 
+0

該錯誤意味着您沒有h264格式的解碼元素,因此playbin無法解碼。安裝gst-libav可以解決它。 –

+0

如果我取消註釋自定義視頻接收器,它的工作原理。因此所有解碼器都已安裝。 –

+0

你說「它有效」,你看到了視頻,或者你只是看到程序運行並退出沒有視頻?如果您確實看到了視頻,請檢查使用的視頻接收器。如果是後面的情況,則pipline可能不起作用。 順便說一句,只是注意到你設置** bin **到'video-sink'屬性。根據它的手冊,你應該在那裏設置一個** GstElement **。 –

回答

2

你必須呼籲videosink倉 「匯」,而不是 「VS」 的ghostpad。 pad名稱是API的一部分,並且sink元素預計會有一個名爲「sink」的pad。

相關問題