C語言多媒體框架GStreamer入門和概述
一.概述
在音視頻領(lǐng)域接觸最多實現(xiàn)的方案通常是通過ffmpeg(PC和sever端居多)或者硬件廠家的的SDK實現(xiàn)特定硬件的編解碼功能(機(jī)頂盒,電視等嵌入式設(shè)備)。這里我們介紹一個在國內(nèi)不太常用的解決方案----gstreamer媒體庫
二.Gstreamer 的特點:
gstreamer跟ffmpeg一樣,也是一個媒體框架,可以實現(xiàn)采集,編碼,解碼,渲染,濾鏡等一條龍的媒體解決方案。
- 跟ffmpeg一樣,也是有命令行工具進(jìn)行測試驗證。同時還可以通過代碼框架直接封裝命令來做工程開發(fā),這一點ffmpeg是不具備的,ffmpeg需要學(xué)習(xí)API才能做工程開發(fā),就算你會ffplay.exe或ffmpeg.exe驗證某些需求,但要集成到代碼,需要學(xué)習(xí)API來實現(xiàn)。而gstreamer只要知道的命令行實現(xiàn)方式,就可以馬上命令行集成到代碼中進(jìn)行使用,當(dāng)然你想代碼優(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,完全不是標(biāo)準(zhǔn)C++那一套邏輯,由于要跨平臺,原生的系統(tǒng)API都是適配封裝了一套,甚至自己實現(xiàn)隊列,MAP,容器,協(xié)程,線程,異步操作,不熟悉glib 的API話,代碼理解比較困難,用慣了C++,STL,boost,感覺得這是gstream最讓人反感的一點,不合主流,搞的我又要學(xué)一套API。
- Gstreamer采用插件管理各個模塊,軟件框架比較復(fù)雜,采用了異步,協(xié)程編程模型,進(jìn)一步增加了理解難度。
一言蔽之,與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二進(jìn)制發(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)文章
Matlab中圖像數(shù)字水印算法的原理與實現(xiàn)詳解
數(shù)字水印技術(shù)作為信息隱藏技術(shù)的一個重要分支,是將信息(水印)隱藏于數(shù)字圖像、視頻、音頻及文本文檔等數(shù)字媒體中,從而實現(xiàn)隱秘傳輸、存儲、標(biāo)注、身份識別、版權(quán)保護(hù)和防篡改等目的。本文就來講講圖像數(shù)字水印算法的原理與實現(xiàn),感興趣的可以了解一下2023-04-04解析Linux下的時間函數(shù):設(shè)置以及獲取時間的方法
本篇文章是對Linux下的時間函數(shù):設(shè)置以及獲取時間的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++實現(xiàn)LeetCode(21.混合插入有序鏈表)
這篇文章主要介紹了C++實現(xiàn)LeetCode(21.混合插入有序鏈表),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言實現(xiàn)選擇排序、冒泡排序和快速排序的代碼示例
這篇文章主要介紹了C++中實現(xiàn)選擇排序、冒泡排序和快速排序的代碼示例,例子帶有執(zhí)行時間統(tǒng)計還可以簡單看一下效率對比,需要的朋友可以參考下2016-04-04VS2017開發(fā)C語言出現(xiàn)“no_init_all“的解決辦法
這篇文章介紹了VS2017開發(fā)C語言出現(xiàn)“no_init_all“的解決辦法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12