網站首頁 編程語言 正文
由于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
原文鏈接:https://blog.csdn.net/u011337602/article/details/81485246
相關推薦
- 2022-07-02 C語言細致講解線程同步的集中方式_C 語言
- 2022-08-22 Android中關于Binder常見面試問題小結_Android
- 2022-07-20 C語言循環鏈表的原理與使用操作_C 語言
- 2022-06-28 C++實現String與UF8互轉_C 語言
- 2022-08-10 Pandas?sample隨機抽樣的實現_python
- 2023-07-18 漏桶算法和令牌桶算法
- 2023-01-14 GoLang日志監控系統實現_Golang
- 2022-06-19 Go獲取兩個時間點時間差的具體實現_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支