天天看點

windows下編譯gstreamer1.16.1windows下編譯gstreamer1.16.1

windows下編譯gstreamer1.16.1

  • windows下編譯gstreamer1.16.1
    • 幾個常備位址
    • 直接下載下傳已編譯好的庫
    • 編譯Glib
      • 方法1:
      • 方法2:
    • 編譯gstreamer1.16.1
    • 反思:
      • 為什麼使用gstreamer
      • 為什麼不用gstreamer

windows下編譯gstreamer1.16.1

先說明沒有編譯通過,但是還是學到了很多東西,現在記錄一下,也希望通過我的一點努力可以螢幕前的你節省更多的時間,做更多有意義的事,為中華程式設計多節省些人力。

幾個常備位址

  • glib 源碼位址 連結
  • gtk相關gstreamer中的glib來源在這裡 連結
  • gstreamer 工程位址 連結
  • vcpkg微軟的一個包管理器 連結下載下傳自動編譯一些開源好用的linux三方庫的東西,看着不錯;

直接下載下傳已編譯好的庫

gstreamer

已編譯的msvc版本 下載下傳位址

找個最新的下載下傳,目前是1.16.1不知道為什麼隻提供64位版本的下載下傳

編譯Glib

下面來在windows上編譯,

gstreamer

依賴于glib庫,是以想到的首先編譯glib的庫

方法1:

使用vcpkg直接下載下傳安裝,這個是微軟項目組維護的項目,下載下傳下來在powershell中執行bootstrap-vcpkg.bat其他的看readme文檔吧 項目位址 官方說明文檔 連結

#執行此指令後會自動編譯出vcpkg.exe具體怎麼實作的我也沒有細看;
bootstrap-vcpkg.bat
#下載下傳源碼并編譯安裝
vcpkg.exe install glib
           

方法2:

目前沒有測試通過,就是下載下傳源碼自己編譯了,具體沒有嘗試,對了上面第一種方法也是glib的文檔中推薦的一種;

編譯gstreamer1.16.1

接下來編譯

gstreamer

了,

gstreamer

編譯現在放在了一個項目中

cerbero

這個項目主要是指導使用者怎麼實作多平台編譯,具體的文檔自己看;我的編譯說明下;

這個項目使用了python3.5+作為配置腳本,是以要安裝python3;

mingw

(注意不是ming-w64)因為内部要使用mingw-get下載下傳依賴包;還有些其他的工具如打包工具什麼的自行看下官方文檔吧,然後進入目錄執行

python3 ./cerbero-uninstalled -v visualstudio -c config/win32.cbc bootstrap
           

注意我使用的1.16.1版本這樣編譯不過提示找不到vs;查源碼得知需設定環境變量,代碼片段如下;

cerbero-1.16.1\cerbero\ide\vs\env.py

def get_program_files_dir():
    if 'PROGRAMFILESX86' in os.environ:
        # Windows 64-bit
        return Path(os.environ['PROGRAMFILESX86'])
    elif 'PROGRAMFILES' in os.environ:
        # Windows 32-bit
        return Path(os.environ['PROGRAMFILES'])
    raise FatalError('Could not find path to 32-bit Program Files directory')
           

這個是我修改後的,主要是指明vs的安裝根目錄;

windows shell

set PROGRAMFILESX86=D:\Program Files (x86)
           

mingw shell

export PROGRAMFILESX86="D:\Program Files (x86)"
           

具體環境變量和我現在寫的不一樣,具體情況具體處理吧;之後就可以編譯了,雖說我的編譯出錯了說是找不到libtool;MGOD 不知道這些項目在幹什麼,看日志cerbero 下載下傳了整套的gcc編譯鍊,為什麼編譯不過不得而知;

反思:

為什麼使用gstreamer

gstreamer的結構性比較好,有強大的架構支撐,減少代碼寫作投入成本,另外内置dbus消息系統,友善開發;

為什麼不用gstreamer

gstreamer内置的dbus不好移植(目前已經在vs2015上編譯通過),另外gstreamer項目依賴了太多的GLP項目,這些項目又依賴太多的其它linux開源項目,内部編譯太過複雜,需要熟悉每個庫的使用和内部原理,強度比較大,不然很難保證商用級産品的釋出;

由于依賴過于複雜不難配置釋出時有太多無用的依賴,對釋出周期要求較高;