網(wǎng)站首頁 編程語言 正文
一.概述
在音視頻領(lǐng)域接觸最多實(shí)現(xiàn)的方案通常是通過ffmpeg(PC和sever端居多)或者硬件廠家的的SDK實(shí)現(xiàn)特定硬件的編解碼功能(機(jī)頂盒,電視等嵌入式設(shè)備)。這里我們介紹一個(gè)在國(guó)內(nèi)不太常用的解決方案----gstreamer媒體庫(kù)
二.Gstreamer 的特點(diǎn):
gstreamer跟ffmpeg一樣,也是一個(gè)媒體框架,可以實(shí)現(xiàn)采集,編碼,解碼,渲染,濾鏡等一條龍的媒體解決方案。
- 跟ffmpeg一樣,也是有命令行工具進(jìn)行測(cè)試驗(yàn)證。同時(shí)還可以通過代碼框架直接封裝命令來做工程開發(fā),這一點(diǎn)ffmpeg是不具備的,ffmpeg需要學(xué)習(xí)API才能做工程開發(fā),就算你會(huì)ffplay.exe或ffmpeg.exe驗(yàn)證某些需求,但要集成到代碼,需要學(xué)習(xí)API來實(shí)現(xiàn)。而gstreamer只要知道的命令行實(shí)現(xiàn)方式,就可以馬上命令行集成到代碼中進(jìn)行使用,當(dāng)然你想代碼優(yōu)雅一點(diǎn)或者你是熟手也可以使用API來實(shí)現(xiàn)。
- Gstreamer是glib實(shí)現(xiàn)的,跨平臺(tái)的實(shí)現(xiàn),windows,linux,androd,ios,macos官方原生支持,而且官方發(fā)布了windows,linux,androd,ios包,如果沒有特別需求,可以直接拿發(fā)布包集成使用。而ffmpeg想支持android,ios,就需要自己做交叉編譯了。
- Gstreamer采用插件實(shí)現(xiàn)方式,根據(jù)業(yè)務(wù)需要可以靈活裁剪插件,可以將發(fā)布包做的非常小,特別適合在嵌入式和移動(dòng)端等應(yīng)用領(lǐng)域,而ffmpeg比較大,在嵌入領(lǐng)域需要自己做代碼級(jí)裁剪。
- Gstreamer 采用glib實(shí)現(xiàn),用C語言來實(shí)現(xiàn)面向?qū)ο笏季S,完全不是標(biāo)準(zhǔn)C++那一套邏輯,由于要跨平臺(tái),原生的系統(tǒng)API都是適配封裝了一套,甚至自己實(shí)現(xiàn)隊(duì)列,MAP,容器,協(xié)程,線程,異步操作,不熟悉glib 的API話,代碼理解比較困難,用慣了C++,STL,boost,感覺得這是gstream最讓人反感的一點(diǎn),不合主流,搞的我又要學(xué)一套API。
- Gstreamer采用插件管理各個(gè)模塊,軟件框架比較復(fù)雜,采用了異步,協(xié)程編程模型,進(jìn)一步增加了理解難度。
一言蔽之,與ffmpeg相比,gstreamer用起來簡(jiǎn)單,但二次開發(fā)難度大,因?yàn)榭蚣埽惒剑瑓f(xié)程等沒有像ffmpeg 代碼用起來那么直接和簡(jiǎn)單。而ffmpeg要理解API才能使用,用起來比較費(fèi)勁,好在代碼理解比較容易,不過容易和簡(jiǎn)單只是相對(duì)的,用久了深入了就容易了。
三.Gstreamer源碼下載地址:
Index of /src ,
由于gstreamer采用插件方法,可以根據(jù)需要安裝自己需要插件,包含很多插件庫(kù)。但最以下2個(gè)庫(kù)是必須的。
核心庫(kù):gstreamer? ??支持gstreamer核心框架的
基本庫(kù):gst-plugins-base? 支持gstreamer最基本功能
在開發(fā)階段建議還安裝gst-plugins-good庫(kù)(常用穩(wěn)定的庫(kù)),后面根據(jù)業(yè)務(wù)需要再做裁剪或者安裝其他庫(kù)。
四.Gstreamer二進(jìn)制發(fā)布庫(kù):
Download GStreamer
包含windows,android,ios,macos的發(fā)布庫(kù)下載,其中Linux版本在各個(gè)Linux發(fā)行版本的包安裝管理器中下載
下載安裝后以下目錄(windows為例) :
其中exe就是命令行工具,dll庫(kù)就是相關(guān)插件。
五.Gstreamer命令行顯示
下面是命令播放視頻文件的命令
gst-launch-1.0.exe playbin uri=file:///D:\\videos\\hevcdemo.ts
如果我們需要D3D 渲染采用d3dsink
gst-launch-1.0 filesrc location=D:\\videos\\test.ts ! decodebin? ! d3dvideosink
如我們需要opengl渲染采用glimagesink
gst-launch-1.0 filesrc location=D:\\videos\\test.ts ! decodebin? ! glimagesink
總之gstreamer插件豐富,用起來靈活,簡(jiǎn)單,后面再具體展開。
原文鏈接:https://blog.csdn.net/chenlycly/article/details/125832524
相關(guān)推薦
- 2022-08-12 Linux?中l(wèi)s命令的使用詳細(xì)介紹_linux shell
- 2022-03-13 .net6引入autofac框架_基礎(chǔ)應(yīng)用
- 2022-11-06 在Centos7中使用vscode和gdb調(diào)試PG插件的方法_C 語言
- 2022-10-19 R語言安裝以及手動(dòng)安裝devtools的詳細(xì)圖文教程_R語言
- 2023-02-15 Python實(shí)現(xiàn)PING命令的示例代碼_python
- 2022-08-17 create-react-app常用自定義配置教程示例_React
- 2022-06-13 Docker容器數(shù)據(jù)卷介紹及操作示例_docker
- 2022-08-05 Entity?Framework主從表的增刪改_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支