GStreamer是一套強大的多媒體中間件系統,跟FFmpeg功能類似。官網鏈接點這兒。
各個Linux發行版(Ubuntu,fedora),大都集成了GStreamer相關工具,而作為軟件層次結構最上層的播放器,幾乎都是直接調用GStreamer相關庫/插件來快速軟件開發。
例如,播放器這類app的開發,只需重點關注各種菜單繪制、進度條更新、開始/暫停控件等,來響應用戶操作,真正工作的大頭都交給GStreamer庫去干,例如demux,decode,render,
這種上-中-下的開發模塊(軟件架構)層次分明,不同(擅長不同業務)人干不同的事情,避免了重復造輪子(讓做UI開發的再去重新開發個解碼器或解碼插件,肯定不現實)。
本篇的目標,主要介紹GStreamer源碼如何編譯成so庫和bin,而不使用發行版自帶的已構建好的庫。因為Linux發行版常常滯后,而隨同其發布時構建的GStreamer庫也跟隨滯后。
1. 環境
本人在Win10下虛擬機中進行代碼構建、調試、驗證,具體環境為:win10 + virtualbox + ubuntu16.04LTS + gstreamer1.17.0.1。
由於已是一年前做視頻編解碼插件時整的東西,有些知識點已經忘記了,但本人盡力保證信息的正確和完備性,特貼到博客中以備后面需要時查閱,有疑問的朋友們可以留言詢問。
2. 源碼下載
兩種方式,一種是去官網下載,另外一種是去github上下載。前者提供各個版本的發行版(不帶歷史提交信息),后者是社區開發階段中的倉庫,可以方便查看歷史修改記錄。
3. 構建工具
早版本(2016-8-12前,Release 1.9.1前)的GStreamer源碼編譯,使用CMake+make方式,后來切換到了meson+ninja,介紹說的是編譯速度加快了很多,如下描述:
貌似很多構建工具開始向meson和ninja切換,以后的開源包的編譯可能會出現
由這種方式:
./autogen.sh && ./configure && make && sudo make install
變成了:
meson build && ninja -C build && sudo ninja -C build install
4. 構建前准備工作
上面一小節中已經介紹了要使用meson工具來構建,但是ubuntu16.04LTS是不帶這個工具的,因此需要安裝這個工具或由源碼編譯后安裝。下面介紹搭建時的一些注意點:
4.1. python需要3.5以上版本,ubuntu16.04默認是2.7
4.2. meson版本>=0.48
meson的版本要求比較高,不能用apt-get直接安裝。下載高版本的meson源碼包(目前版本0.52.999),在meson包里面執行python3 setup.py install。
安裝meson時又出現setuptools問題(sudo apt-get install python3-setuptools,再將meson工具從/usr/local/bin/meson默認安裝路徑中拷到/usr/bin下)。
4.3. meson build出錯
glib未安裝 -> sudo apt-get install glib-2.0,后面仍出問題顯示模塊未安裝(放棄,通過源碼編譯安裝)。
sudo apt-get install glib2.0這個可以安裝。
4.4. 其他東西安裝:flex,bison,直接使用apt-get來安裝
5. 構建流程
meson build -Dprefix=/usr/gst-dev //利用meson.build生成文件meson.ninja,並放置於build目錄
ninja -C build //進入目錄,利用配置文件build.ninja編譯
meson install //所有文件安裝於/usr/gst-dev目錄下
其他常用命令
meson build --reconfigure //重新配置,例如安裝路徑的前綴-Dprefix