Gstreamer基礎知識教程
由於deepstream是基於gstreamer的,所以要想在deepstream上做拓展,需要對gstreamer有一定的認識。以下主要介紹Gstreamer整體框架和Gstreamer基礎概念。
一、Gstreamer整體框架
gstreamer是一個用於開發流式多媒體應用的開源框架。本身這個框架是為瞭更好的處理音視頻而設計開發的,但gstreamer不限於處理音視頻,隻要是有明顯的數據流特征的應用,gstreamer都能很好的應用。
gstreamer的整體功能核心是pipeline框架以及用於擴展功能的插件:
1、pipeline用於安排數據流圖,明確數據流處理過程。通過gstreamer多媒體數據協商機制和同步機制,pipeline能夠很好的地處理流式數據。
2、插件用於擴展功能,開發者可以靈活利用已有插件,而且還可以自定義特定功能插件。
二、Gstreamer基礎概念
Gstreamer的基礎概念有如下四個,瞭解這四個概念是我們將Gstreamer玩起來的前提
1、Elements
Elements是一個pipeline中的基本組成功能實體,通過將不同功能的elements連起來,就可以實現一個數據流處理功能。如圖所示,通過將source filer sink三種element連起來,可以實現對pipeline中傳輸數據格式的過濾。
element主要有三種:
(1) source element,主要是作為一個pipeline中的source節點,是數據源。source element隻有src pad,即隻有輸出口。
(2) sink element ,作為pipline的end節點 。sink element 隻有sink pad,即隻有輸入口。
(3) common element,作為pipline中的中間數據處理單元,既有sink pad,也有src pad,通常有:Filters, convertors, demuxers, muxers and codecs等
2、pad
pad是element的輸入和輸出,作為協商鏈接和數據傳輸用,鏈接隻能是兩個pad之間的,每個Pad都可以限定支持的數據格式。當兩個不同Pad之間的格式匹配,兩個Pad就可以進行鏈接,並傳輸數據。
3、bin和Pipeline
bin是element的一個集合,bin中的element理應互聯,從而使bin也能提供某種功能,由於bin是element的子類,所以所有的element的操作,bin幾乎都繼承瞭。
pipeline是一個完整的流式數據處理流程,可以看成一個頂級的bin。pipeline如下圖所示
4、通信
Gstreamer為應用提供瞭幾種通信機制:
(1)buffer 用於element之間數據傳遞,buffer中包含的是媒體數據,buffer的傳輸方向永遠是從src pad 到sink pad的,即向下傳輸。
(2) event element之間或者application到element的信息傳輸,包含的是控制數據。event既可以向下也可以向上傳輸。
(3)message 由element向application傳輸,用於傳輸 errors,tags,state changes, buffering state, redirects等信息。
(4)queries 通常由application向pipeline發送,用於請求一些持續時間和播放點等信息。queries的應答是同步的。element也可以使用queries來向相鄰element請求相應的信息
這邊隻做簡單的介紹,詳細的可以查閱Gstreamer 官方用戶手冊
https://gstreamer.freedesktop.org/documentation/index.html
到此這篇關於Gstreamer基礎知識教程的文章就介紹到這瞭,更多相關Gstreamer基礎知識內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- vscode調試gstreamer源碼的詳細流程
- 解析Java8 Stream原理
- Redis 如何批量設置過期時間(PIPLINE的使用)
- 詳解分析MySQL8.0的內存消耗
- R語言統計結果輸出至本地文件的幾種方法示例