首頁 > 軟體

C語言多媒體框架GStreamer入門和概述

2022-07-21 14:04:32

一.概述

在音視訊領域接觸最多實現的方案通常是通過ffmpeg(PC和sever端居多)或者硬體廠家的的SDK實現特定硬體的編解碼功能(機上盒,電視等嵌入式裝置)。這裡我們介紹一個在國內不太常用的解決方案----gstreamer媒體庫

二.Gstreamer 的特點:

gstreamer跟ffmpeg一樣,也是一個媒體框架,可以實現採集,編碼,解碼,渲染,濾鏡等一條龍的媒體解決方案。

  • 跟ffmpeg一樣,也是有命令列工具進行測試驗證。同時還可以通過程式碼框架直接封裝命令來做工程開發,這一點ffmpeg是不具備的,ffmpeg需要學習API才能做工程開發,就算你會ffplay.exe或ffmpeg.exe驗證某些需求,但要整合到程式碼,需要學習API來實現。而gstreamer只要知道的命令列實現方式,就可以馬上命令列整合到程式碼中進行使用,當然你想程式碼優雅一點或者你是熟手也可以使用API來實現。
  • Gstreamer是glib實現的,跨平臺的實現,windows,linux,androd,ios,macos官方原生支援,而且官方釋出了windows,linux,androd,ios包,如果沒有特別需求,可以直接拿釋出包整合使用。而ffmpeg想支援android,ios,就需要自己做交叉編譯了。
  • Gstreamer採用外掛實現方式,根據業務需要可以靈活裁剪外掛,可以將釋出包做的非常小,特別適合在嵌入式和行動端等應用領域,而ffmpeg比較大,在嵌入領域需要自己做程式碼級裁剪。
  • Gstreamer 採用glib實現,用C語言來實現物件導向思維,完全不是標準C++那一套邏輯,由於要跨平臺,原生的系統API都是適配封裝了一套,甚至自己實現佇列,MAP,容器,協程,執行緒,非同步操作,不熟悉glib 的API話,程式碼理解比較困難,用慣了C++,STL,boost,感覺得這是gstream最讓人反感的一點,不合主流,搞的我又要學一套API。
  • Gstreamer採用外掛管理各個模組,軟體框架比較複雜,採用了非同步,協程程式設計模型,進一步增加了理解難度。

一言蔽之,與ffmpeg相比,gstreamer用起來簡單,但二次開發難度大,因為框架,非同步,協程等沒有像ffmpeg 程式碼用起來那麼直接和簡單。而ffmpeg要理解API才能使用,用起來比較費勁,好在程式碼理解比較容易,不過容易和簡單只是相對的,用久了深入了就容易了。

三.Gstreamer原始碼下載地址:

Index of /src ,

由於gstreamer採用外掛方法,可以根據需要安裝自己需要外掛,包含很多外掛庫。但最以下2個庫是必須的。

核心庫:gstreamer    支援gstreamer核心框架的

基本庫:gst-plugins-base  支援gstreamer最基本功能

在開發階段建議還安裝gst-plugins-good庫(常用穩定的庫),後面根據業務需要再做裁剪或者安裝其他庫。

四.Gstreamer二進位制釋出庫:

Download GStreamer

包含windows,android,ios,macos的釋出庫下載,其中Linux版本在各個Linux發行版本的包安裝管理器中下載

下載安裝後以下目錄(windows為例) :

其中exe就是命令列工具,dll庫就是相關外掛。

五.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外掛豐富,用起來靈活,簡單,後面再具體展開。

到此這篇關於gstreamer(一)入門和概述的文章就介紹到這了,更多相關C語言多媒體框架GStreamer內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com