Gstreamer基礎(chǔ)知識(shí)教程
由于deepstream是基于gstreamer的,所以要想在deepstream上做拓展,需要對(duì)gstreamer有一定的認(rèn)識(shí)。以下主要介紹Gstreamer整體框架和Gstreamer基礎(chǔ)概念。
一、Gstreamer整體框架
gstreamer是一個(gè)用于開(kāi)發(fā)流式多媒體應(yīng)用的開(kāi)源框架。本身這個(gè)框架是為了更好的處理音視頻而設(shè)計(jì)開(kāi)發(fā)的,但gstreamer不限于處理音視頻,只要是有明顯的數(shù)據(jù)流特征的應(yīng)用,gstreamer都能很好的應(yīng)用。
gstreamer的整體功能核心是pipeline框架以及用于擴(kuò)展功能的插件:
1、pipeline用于安排數(shù)據(jù)流圖,明確數(shù)據(jù)流處理過(guò)程。通過(guò)gstreamer多媒體數(shù)據(jù)協(xié)商機(jī)制和同步機(jī)制,pipeline能夠很好的地處理流式數(shù)據(jù)。
2、插件用于擴(kuò)展功能,開(kāi)發(fā)者可以靈活利用已有插件,而且還可以自定義特定功能插件。

二、Gstreamer基礎(chǔ)概念
Gstreamer的基礎(chǔ)概念有如下四個(gè),了解這四個(gè)概念是我們將Gstreamer玩起來(lái)的前提
1、Elements
Elements是一個(gè)pipeline中的基本組成功能實(shí)體,通過(guò)將不同功能的elements連起來(lái),就可以實(shí)現(xiàn)一個(gè)數(shù)據(jù)流處理功能。如圖所示,通過(guò)將source filer sink三種element連起來(lái),可以實(shí)現(xiàn)對(duì)pipeline中傳輸數(shù)據(jù)格式的過(guò)濾。

element主要有三種:
(1) source element,主要是作為一個(gè)pipeline中的source節(jié)點(diǎn),是數(shù)據(jù)源。source element只有src pad,即只有輸出口。

(2) sink element ,作為pipline的end節(jié)點(diǎn) 。sink element 只有sink pad,即只有輸入口。

(3) common element,作為pipline中的中間數(shù)據(jù)處理單元,既有sink pad,也有src pad,通常有:Filters, convertors, demuxers, muxers and codecs等


2、pad
pad是element的輸入和輸出,作為協(xié)商鏈接和數(shù)據(jù)傳輸用,鏈接只能是兩個(gè)pad之間的,每個(gè)Pad都可以限定支持的數(shù)據(jù)格式。當(dāng)兩個(gè)不同Pad之間的格式匹配,兩個(gè)Pad就可以進(jìn)行鏈接,并傳輸數(shù)據(jù)。
3、bin和Pipeline
bin是element的一個(gè)集合,bin中的element理應(yīng)互聯(lián),從而使bin也能提供某種功能,由于bin是element的子類(lèi),所以所有的element的操作,bin幾乎都繼承了。
pipeline是一個(gè)完整的流式數(shù)據(jù)處理流程,可以看成一個(gè)頂級(jí)的bin。pipeline如下圖所示

4、通信
Gstreamer為應(yīng)用提供了幾種通信機(jī)制:
(1)buffer 用于element之間數(shù)據(jù)傳遞,buffer中包含的是媒體數(shù)據(jù),buffer的傳輸方向永遠(yuǎn)是從src pad 到sink pad的,即向下傳輸。
(2) event element之間或者application到element的信息傳輸,包含的是控制數(shù)據(jù)。event既可以向下也可以向上傳輸。
(3)message 由element向application傳輸,用于傳輸 errors,tags,state changes, buffering state, redirects等信息。
(4)queries 通常由application向pipeline發(fā)送,用于請(qǐng)求一些持續(xù)時(shí)間和播放點(diǎn)等信息。queries的應(yīng)答是同步的。element也可以使用queries來(lái)向相鄰element請(qǐng)求相應(yīng)的信息

這邊只做簡(jiǎn)單的介紹,詳細(xì)的可以查閱Gstreamer 官方用戶手冊(cè)
https://gstreamer.freedesktop.org/documentation/index.html
到此這篇關(guān)于Gstreamer基礎(chǔ)知識(shí)教程的文章就介紹到這了,更多相關(guān)Gstreamer基礎(chǔ)知識(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 操作系統(tǒng)內(nèi)存分配算法的實(shí)現(xiàn)詳解
本文主要介紹了在動(dòng)態(tài)分區(qū)管理方式下采用不同的分配算法實(shí)現(xiàn)主存分配和實(shí)現(xiàn)主存回收,旨在幫助學(xué)生理解在動(dòng)態(tài)分區(qū)管理方式下應(yīng)怎樣實(shí)現(xiàn)主存空間的分配和回收。感興趣的可以了解一下2021-11-11
C語(yǔ)言宏函數(shù)container of()簡(jiǎn)介
這篇文章介紹了C語(yǔ)言宏函數(shù)container of(),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
VSCode 配置C++開(kāi)發(fā)環(huán)境的方法步驟
這篇文章主要介紹了VSCode 配置C++開(kāi)發(fā)環(huán)境的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
C語(yǔ)言中調(diào)用Swift函數(shù)實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言中調(diào)用Swift函數(shù)實(shí)例詳解的相關(guān)資料,實(shí)現(xiàn)該功能可以通過(guò)定義全局的指向Blocks的對(duì)象指針來(lái)實(shí)現(xiàn),需要的朋友可以參考下2017-07-07
C語(yǔ)言深入講解之從函數(shù)棧幀角度理解return關(guān)鍵字
在C語(yǔ)言中,一般情況下函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句來(lái)實(shí)現(xiàn)的,每調(diào)用一次return語(yǔ)句只能從函數(shù)中返回一個(gè)值,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言從函數(shù)棧幀角度理解return關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下2021-09-09
C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

