C語言多媒體框架GStreamer入門和概述
一.概述
在音視頻領(lǐng)域接觸最多實現(xiàn)的方案通常是通過ffmpeg(PC和sever端居多)或者硬件廠家的的SDK實現(xiàn)特定硬件的編解碼功能(機頂盒,電視等嵌入式設(shè)備)。這里我們介紹一個在國內(nèi)不太常用的解決方案----gstreamer媒體庫

二.Gstreamer 的特點:
gstreamer跟ffmpeg一樣,也是一個媒體框架,可以實現(xiàn)采集,編碼,解碼,渲染,濾鏡等一條龍的媒體解決方案。
- 跟ffmpeg一樣,也是有命令行工具進行測試驗證。同時還可以通過代碼框架直接封裝命令來做工程開發(fā),這一點ffmpeg是不具備的,ffmpeg需要學(xué)習(xí)API才能做工程開發(fā),就算你會ffplay.exe或ffmpeg.exe驗證某些需求,但要集成到代碼,需要學(xué)習(xí)API來實現(xiàn)。而gstreamer只要知道的命令行實現(xiàn)方式,就可以馬上命令行集成到代碼中進行使用,當然你想代碼優(yōu)雅一點或者你是熟手也可以使用API來實現(xiàn)。
- Gstreamer是glib實現(xiàn)的,跨平臺的實現(xiàn),windows,linux,androd,ios,macos官方原生支持,而且官方發(fā)布了windows,linux,androd,ios包,如果沒有特別需求,可以直接拿發(fā)布包集成使用。而ffmpeg想支持android,ios,就需要自己做交叉編譯了。
- Gstreamer采用插件實現(xiàn)方式,根據(jù)業(yè)務(wù)需要可以靈活裁剪插件,可以將發(fā)布包做的非常小,特別適合在嵌入式和移動端等應(yīng)用領(lǐng)域,而ffmpeg比較大,在嵌入領(lǐng)域需要自己做代碼級裁剪。
- Gstreamer 采用glib實現(xiàn),用C語言來實現(xiàn)面向?qū)ο笏季S,完全不是標準C++那一套邏輯,由于要跨平臺,原生的系統(tǒng)API都是適配封裝了一套,甚至自己實現(xiàn)隊列,MAP,容器,協(xié)程,線程,異步操作,不熟悉glib 的API話,代碼理解比較困難,用慣了C++,STL,boost,感覺得這是gstream最讓人反感的一點,不合主流,搞的我又要學(xué)一套API。
- Gstreamer采用插件管理各個模塊,軟件框架比較復(fù)雜,采用了異步,協(xié)程編程模型,進一步增加了理解難度。
一言蔽之,與ffmpeg相比,gstreamer用起來簡單,但二次開發(fā)難度大,因為框架,異步,協(xié)程等沒有像ffmpeg 代碼用起來那么直接和簡單。而ffmpeg要理解API才能使用,用起來比較費勁,好在代碼理解比較容易,不過容易和簡單只是相對的,用久了深入了就容易了。
三.Gstreamer源碼下載地址:
由于gstreamer采用插件方法,可以根據(jù)需要安裝自己需要插件,包含很多插件庫。但最以下2個庫是必須的。
核心庫:gstreamer 支持gstreamer核心框架的
基本庫:gst-plugins-base 支持gstreamer最基本功能
在開發(fā)階段建議還安裝gst-plugins-good庫(常用穩(wěn)定的庫),后面根據(jù)業(yè)務(wù)需要再做裁剪或者安裝其他庫。

四.Gstreamer二進制發(fā)布庫:
包含windows,android,ios,macos的發(fā)布庫下載,其中Linux版本在各個Linux發(fā)行版本的包安裝管理器中下載
下載安裝后以下目錄(windows為例) :

其中exe就是命令行工具,dll庫就是相關(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插件豐富,用起來靈活,簡單,后面再具體展開。
到此這篇關(guān)于gstreamer(一)入門和概述的文章就介紹到這了,更多相關(guān)C語言多媒體框架GStreamer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步從底層入手搞定C++引用與內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)是代碼插入到調(diào)用者代碼處的函數(shù),內(nèi)聯(lián)函數(shù)通過避免被調(diào)用的開銷來提高執(zhí)行效率,下面這篇文章主要給大家介紹了關(guān)于如何從底層入手搞定C++引用與內(nèi)聯(lián)函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-03-03
C語言實現(xiàn)訪問及查詢MySQL數(shù)據(jù)庫的方法
這篇文章主要介紹了C語言實現(xiàn)訪問及查詢MySQL數(shù)據(jù)庫的方法,涉及C語言基于libmysql.lib實現(xiàn)訪問MySQL數(shù)據(jù)庫的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
C語言多種方法實現(xiàn)一個函數(shù)左旋字符串中K個字符
這篇文章主要為大家介紹了C語言多種方法實現(xiàn)一個函數(shù),可以左旋字符串中K個字符,文中附含詳細的示例講解,有需要的朋友可以借鑒參考下2021-10-10
C語言二維數(shù)組應(yīng)用實現(xiàn)掃雷游戲
這篇文章主要為大家詳細介紹了C語言二維數(shù)組應(yīng)用實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06

