close

如官方網站提供的文件

Dynamic Pad

通常 demux 的時候會用到 dynamic(somestime) pad, 下面是 Element matroskademux 的資料

Pad Templates:
  SRC template: 'video_%u'
    Availability: Sometimes
    Capabilities:
      ANY
 
  SRC template: 'audio_%u'
    Availability: Sometimes
    Capabilities:
      ANY

這個 pad 實際上是動態建立的, 在資料流過來的時候會依據你的 capabilities 是 video 還是 audio 而決定要流向哪個 pad,

所以使用 demux Element 的時候必須要建立 signal如下

g_signal_connect (demux, "pad-added", G_CALLBACK (cb_new_pad), NULL);
void cb_new_pad(GstElement *element, GstPad *pad, gpointer data)
{
    if(strcmp(gst_pad_get_name(pad), "audio_%u") == 0) {
        gst_element_link_pads(element, gst_pad_get_name(pad),
        GST_ELEMENT(data), "sink");
    }
}

Request Pad

Request pad 通常是 muxer的時候會用到, 利用gst-inspect-1.0 matroskamux 可以發現Availability呈現 On request

Pad Templates:
  SINK template: 'video_%u'
    Availability: On request

  SINK template: 'audio_%u'
    Availability: On request

 

Ghost Pad

在我的映像裡只會在bin的時候用到ghost pad, ghost pad是指Element 本身並沒有 pad, 而去建立pad 好像pipeline可以流動

舉例來說

如果你有2個多媒體的檔案, 分別是 mkv以及mp4, 那麼在一邊情形下, 我們會利用2個pipeline分別去處理 .mkv 以及 .mp4.

像是filesrc-> matroskademux -> decodebin -> videoconvert -> autovideosink 以及

         filesrc -> qtdemux -> decodebin -> videoconvert -> autovideosink

但是你可以改成這樣

  bin =   filesrc-> matroskademux ! queue

  bin2 = filesrc -> qtdemux ! queue

  bin3 =  queue ! decodebin ! videoscale ! videorate ! videoconvert ! ximagesink

  根據你的副檔名是 mkv還是mp4來決定要串 bin+bin3 還是 bin2+bin3

 
 
arrow
arrow
    文章標籤
    GStreamer
    全站熱搜
    創作者介紹
    創作者 stephenwei 的頭像
    stephenwei

    stephenwei的部落格

    stephenwei 發表在 痞客邦 留言(0) 人氣()