網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一.概述
在音視頻領(lǐng)域接觸最多實(shí)現(xiàn)的方案通常是通過(guò)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í)還可以通過(guò)代碼框架直接封裝命令來(lái)做工程開(kāi)發(fā),這一點(diǎn)ffmpeg是不具備的,ffmpeg需要學(xué)習(xí)API才能做工程開(kāi)發(fā),就算你會(huì)ffplay.exe或ffmpeg.exe驗(yàn)證某些需求,但要集成到代碼,需要學(xué)習(xí)API來(lái)實(shí)現(xiàn)。而gstreamer只要知道的命令行實(shí)現(xiàn)方式,就可以馬上命令行集成到代碼中進(jìn)行使用,當(dāng)然你想代碼優(yōu)雅一點(diǎn)或者你是熟手也可以使用API來(lái)實(shí)現(xiàn)。
- Gstreamer是glib實(shí)現(xiàn)的,跨平臺(tái)的實(shí)現(xiàn),windows,linux,androd,ios,macos官方原生支持,而且官方發(fā)布了windows,linux,androd,ios包,如果沒(méi)有特別需求,可以直接拿發(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語(yǔ)言來(lái)實(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,感覺(jué)得這是gstream最讓人反感的一點(diǎn),不合主流,搞的我又要學(xué)一套API。
- Gstreamer采用插件管理各個(gè)模塊,軟件框架比較復(fù)雜,采用了異步,協(xié)程編程模型,進(jìn)一步增加了理解難度。
一言蔽之,與ffmpeg相比,gstreamer用起來(lái)簡(jiǎn)單,但二次開(kāi)發(fā)難度大,因?yàn)榭蚣埽惒剑瑓f(xié)程等沒(méi)有像ffmpeg 代碼用起來(lái)那么直接和簡(jiǎn)單。而ffmpeg要理解API才能使用,用起來(lái)比較費(fèi)勁,好在代碼理解比較容易,不過(guò)容易和簡(jiǎn)單只是相對(duì)的,用久了深入了就容易了。
三.Gstreamer源碼下載地址:
Index of /src ,
由于gstreamer采用插件方法,可以根據(jù)需要安裝自己需要插件,包含很多插件庫(kù)。但最以下2個(gè)庫(kù)是必須的。
核心庫(kù):gstreamer? ??支持gstreamer核心框架的
基本庫(kù):gst-plugins-base? 支持gstreamer最基本功能
在開(kāi)發(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插件豐富,用起來(lái)靈活,簡(jiǎn)單,后面再具體展開(kāi)。
原文鏈接:https://blog.csdn.net/chenlycly/article/details/125832524
相關(guān)推薦
- 2022-05-12 python2中input()漏洞
- 2024-03-25 在SpringBoot中系統(tǒng)異常和自定義的異常的統(tǒng)一處理
- 2023-06-02 python實(shí)現(xiàn)斷點(diǎn)調(diào)試的方法_python
- 2022-08-15 centos7 redis5安裝
- 2022-10-31 R語(yǔ)言中set.seed()函數(shù)的作用詳解_R語(yǔ)言
- 2023-01-15 React報(bào)錯(cuò)Too?many?re-renders解決_React
- 2022-07-08 python?根據(jù)csv表頭、列號(hào)讀取數(shù)據(jù)的實(shí)現(xiàn)_python
- 2023-10-12 可選鏈操作符(?.)及其使用方法與場(chǎng)景
- 最近更新
-
- 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)證過(guò)濾器
- 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)程分支