如官方網站提供的文件
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
留言列表