本文適合開發者采用Gstreamer開發Gstreamer應用。只針對Linux。對於windows,可以參考 Building using Cerbero.
Meson構建系統是一種便攜式構建系統,該系統速度快,並且比替代方案更加易於使用。 它生成構建指令,即可執行。 GStreamer項目將其用於所有子項目。由於GStreamer具有許多組件且具有許多依賴性,因此gst-build模塊包含多個python3腳本,以簡化使用Meson進行下載和配置的所有操作。 它使用meson的一項功能,該功能允許定義子項目,因此可以一次性配置和構建GStreamer模塊以及某些依賴項。
一、設置gst-build
git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git
cd gst-build
或者,如果您具有開發人員訪問存儲庫的權限,請執行以下操作:
git clone git@gitlab.freedesktop.org:gstreamer / gst-build.git
cd gst-build
GST構建的布局
gst-build包含一些著名的腳本和目錄:
meson.build是頂級構建定義,它將遞歸配置所有依賴項。它還定義了一些幫助程序命令,使您可以卸載開發環境或輕松更新GStreamer模塊的git存儲庫。
subprojects /是包含GStreamer模塊和一系列依賴項的目錄。
基本meson用法
通過執行以下命令來配置模塊(或在gst-build中一次完成幾個配置):
meson<build_directory>
build_directory是所有構建指令和輸出所在的位置(這也稱為“目錄外”構建)。如果未創建目錄,則將在此時完成。請注意,不帶任何命令參數調用meson就是隱式調用meson設置命令(即執行項目的初始配置)。
關於build_directory的位置只有一個限制:它不能與源目錄相同(即,您在其中克隆模塊或gst-build的位置)。它可以在該目錄之外,也可以在該目錄下/內。
配置meson后,您可以:
輸入指定的構建目錄並運行ninja。
cd <構建目錄>
ninja
或者,您可以僅將構建目錄指定為參數,而不是每次希望執行ninja命令時都切換到構建目錄。此選項的優點是您可以在任何地方運行它(而不是更改為ninja目錄)
ninja -C /path/ to/build_directory
這將從該模塊(和子項目,如果在gst-build中)構建所有內容。
注意:修改源文件時,無需重新運行meson,只需要重新運行ninja 即可。如果您更改了構建/配置文件,ninja 將自行確定meson需要重新運行,並將自動執行。
進入“卸載”環境
GStreamer由幾種工具,插件和組件組成。為了簡化開發和測試,有一個目標(由gst-build提供)將相應地設置環境變量,以便您可以直接使用所有構建結果。
ninja -C <路徑/到/構建目錄> devenv
您會注意到提示已相應更改。然后,您可以運行直接構建的任何GStreamer工具(例如gst-inspect-1.0,gst-launch-1.0等)。
使用多個分支機構或遠程站點
跟蹤多個git遠程存儲庫(例如官方上游存儲庫和您在gitlab上的個人克隆)並不罕見。
您可以使用configure命令列出meson項目的所有可用選項:
meson configure
這個命令非常關鍵,顯示的結果如下:
這個可以指導如何寫-D <選項名稱> = <選項值> ,比如第一項 gst-plugins-bad:accurip, meson命令可以通過
meson -Dgst-plugins-bad:accurip=enabled
將該選項設置為使能。
如果您已經配置了構建目錄,則可以提供該目錄,並且還將獲得該構建的配置值:
meson configure <build-directory>
該命令將列出每個選項:
注:auto的值表示meson將在配置時確定正確的值(例如,如果您有可用的開發包來構建某個插件)。
您還將看到<繼承自主項目>的值。這主要用於作為通用選項的選項。例如,doc選項出現在頂層以及每個子模塊上(例如:gstreamer:doc)。通常,您只想一次設置該選項的值,所有子模塊都將繼承自該選項。
然后,當使用-D <選項名稱> = <選項值>配置構建時,可以為meson提供這些選項。例如,如果不想在gst-build(rs選項)中構建rust插件,則可以執行以下操作:
meson-Drs =disable <構建目錄>
運行測試
通過從構建目錄調用meson測試或meson測試-C <path / to / build_directory>來運行單元測試。如果有任何失敗,您可以查看最后指定的文件,也可以運行meson測試--print-errorlogs,它將在執行后向您顯示失敗測試的日志。
您也可以通過指定名稱name來僅執行測試的子集。例如meson測試gst_gstpad。完整的測試列表可通過meson測試--list獲得。
如果構建了gst-devtools子模塊,則還可以使用gst-validate-launchergst-validate來運行測試。
gst-validate-launcher check.gst *
下面是我用的meson 編譯選項:希望可以作為大家的參考
meson --default-library=static -Dgst-full-libraries=app,video -Dgood=enabled -Dgst-plugins-good:qt5=enabled -Dauto_features=disabled -Dgstreamer:tools=enabled -Dbad=enabled -Dgst-plugins-bad:openh264=enabled -Dbad=enabled -Dgst-plugins-bad:msdk=enabled ./build