什么是Gstreamer?
Gstreamer是一個支持Windows,Linux,Android, iOS的跨平臺的多媒體框架,應用程序可以通過管道(Pipeline)的方式,將多媒體處理的各個步驟串聯(lián)起來,達到預期的效果。每個步驟通過元素(Element)基于GObject對象系統(tǒng)通過插件(plugins)的方式實現(xiàn),方便了各項功能的擴展。
下圖是對基于Gstreamer框架的應用的簡單分層:
可參考
新版編解碼
gstreamer 自1.17.1開始,便拋棄了老版本的gpu硬編解方案,采取了新方案,新方案對環(huán)境要求放松,意味著更好編譯,更穩(wěn)定:
老版方案裝一些預環(huán)境還比較麻煩,所以建議拋棄老版本,用新版本。
另外 ubuntu20.04的默認支持gst1.16.3 所有一些諸如桌面之類依賴會有gst相關的庫,在編譯時容易鏈接錯誤,預計用ubutnu22.04及其以上,配合新版本1.21.3以上,應該會好很多。由于目前需要使用ubutnu20.04,故以下以此記錄。
編譯安裝步驟
預備環(huán)境
Ubuntu20.04 python3.8系統(tǒng)自帶
測試過如果是anaconda的python,需要把anaconda帶的gst給卸載了:
conda uninstall gstreamer gst-plugins-base
編譯環(huán)境依賴安裝
sudo apt-get install build-essential dpkg-dev flex bison autotools-dev automake liborc-dev autopoint libtool gtk-doc-tools python3-pip libmount-dev python3-pip meson bison flex ninja-build libglib2.0-dev nasm
sudo apt-get install valgrind libgirepository1.0-dev libcap-dev libgtk-3-dev libunwind-dev clzip gobject-introspection libdw-dev
sudo apt-get install libxv-dev libasound2-dev libtheora-dev libogg-dev libvorbis-dev
sudo apt-get install libbz2-dev libv4l-dev libvpx-dev libjack-jackd2-dev libsoup2.4-dev libpulse-dev
sudo apt-get install faad libfaad-dev libfaac-dev libx264-dev libmad0-dev
sudo apt install build-essential cmake git python3-dev python3-numpy \
libavcodec-dev libavformat-dev libswscale-dev libgtk-3-dev libgtk2.0-dev libcanberra-gtk-module \
libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev \
libopencv-dev x264 libx264-dev libssl-dev ffmpeg
編譯安裝gst
安裝1.18版本,對于Ubuntu20.04是合適的選擇,對于meson的和ninja可以用系統(tǒng)默認版本,更高版本的gst,要對應升級meson和ninja
默認編譯安裝位置prefix 是/usr/local,由于ubuntu20.04桌面版本默認安裝了gst-1.16.3,所以安裝路徑不要是/usr,雖然可解決很多編譯鏈接問題。
若裝在/usr下,可以不用設置下邊的環(huán)境變量,但謹慎,若是桌面版本ubutnu20.04,依賴gst的桌面可能出問題,包括但不限于系統(tǒng)設置打不開,依賴qt的一些軟件可能打開異?!捎胐ocker裝無桌面環(huán)境,或者直接就是無桌面的系統(tǒng)規(guī)避這個問題。
以下以ubuntu20.04桌面版本,設置prefix的路徑安裝在gst-build下的install文件夾下,編譯后在設置合適的環(huán)境變量,即可正確找到動態(tài)庫
git clone -b 1.18 https://github.com/GStreamer/gst-build.git
meson setup --prefix=/home/lenovo/compiled_project/gst-build/install build -Dbad=enabled -Dgst-plugins-bad:nvcodec=enabled
#設置環(huán)境變量 可以編譯安裝之后設置,也可以現(xiàn)在按照下方的路徑規(guī)律,替換掉安裝的根目錄,主要是不是一步步的編譯方式,所有這個過程不太嚴謹
gedit ~/.bashrc
#在末尾添加
export LD_LIBRARY_PATH=/home/lenovo/compiled_project/gst-build/install/lib:/home/lenovo/compiled_project/gst-build/install/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/lenovo/compiled_project/gst-build/install/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
export GST_PLUGIN_PATH=/home/lenovo/compiled_project/gst-build/install/lib/x86_64-linux-gnu/gstreamer-1.0
#激活環(huán)境變量
source ~/.bashrc
#編譯安裝
sudo ninja -C build install
gst-inspect-1.0 --version #查看是否安裝成功
gst-inspect-1.0 -a | grep nvh264
#測試代碼 若無報錯可跑基本沒啥問題
gst-launch-1.0 rtspsrc location=rtsp://xxx:xxx@192.168.0.2:554/h264/ch1/main/av_stream ! rtph264depay ! h264parse ! nvh264dec ! videoconvert ! videoscale ! video/x-raw,width=640,height=480 ! nvh264enc ! h264parse ! filesink location=vid2.mp4
#類似報錯 即下載出錯,自己用瀏覽器下載后解壓到subprojects下并修改為對應名稱,請注意版本,可以去對應名字的.wrap文件下去看,對于gst-plugins-base、gst-plugins-good,gst-plugins-bad,gst-plugins-ugly,去https://gitlab.freedesktop.org/gstreamer提前下載放subprojects下,版本對應1.18
subprocess.CalledProcessError: Command '['/bin/git', '-C', '/home/argo/compiled_project/gst-build-1.18/subprojects', 'clone', 'https://gitlab.gnome.org/gnome/libsoup.git', 'libsoup']' returned non-zero exit status 128.
opencv-python支持gst
opencv-python 支持此時的gst,也就同樣可以用硬編解
即重新編譯安裝opencv-python即可
參考
一些記錄
參考官網(wǎng)安裝,以及dpkg查看gstreamer安裝,
dpkg -l | grep libgstreamer
conda list | grep gst
ubuntu 桌面依賴于gst的,所有有相關的動態(tài)庫等的安裝 sudo apt show ubuntu-desktop | grep gstreamer
版本可見是1.16,所以如果不正確配置,會鏈接錯誤文章來源:http://www.zghlxwxcb.cn/news/detail-680577.html
參考網(wǎng)址:
https://mesonbuild.com/Tutorial.html
https://gstreamer.freedesktop.org/documentation/installing/index.html?gi-language=c
https://gitlab.freedesktop.org/gstreamer/gst-build
https://github.com/GStreamer/gst-build
編譯步驟參考:
https://blog.csdn.net/cdnight/article/details/112093636文章來源地址http://www.zghlxwxcb.cn/news/detail-680577.html
到了這里,關于Ubuntu20.04 編譯 gstreamer 支持gpu硬編解 opencv-python同支持gst的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!