Ubuntu(18.04 x64)开发环境下,有时需要采用NVIDIA显卡进行诸如H.264编解码,本文介绍采用gstreamer调用nvenc,nvdec插件并进行编解码操作。
1.下载gst-plugins-bad
1)查询gstreamer版本
从gstreamer官网GStreamer: news我们看到nvdec是在Gstreamer1.14.0版本才添加的,所以需要确保gstreamer版本在1.14.0以上,如果不是,就需要重新安装了。
Ubuntu环境下:
gst-launch-1.0 –version
2)下载
我的gstreamer版本为:1.14.5,但是,采用
gst-inspect-1.0 nvdec
是没有的,说明gstreamer默认安装是没有的nvdec的,需要重新编译gst-plugins-bad(nvenc,nvdec存在于这个插件中)。可以从官网直接下载,我的版本是1.14.5,找到1.14.5下载gst-plugins-bad就可以了。
3)解压
tar -vxf gst-plugins-bad-1.14.5.tar.xz
2. 下载Video Codec SDK
这个是gst-plugins-bad编译过程中需要的库及头文件,需要从NVIDIA官网下载,下载地址:NVIDIA VIDEO CODEC SDK - Get Started | NVIDIA Developer我下载的版本为:12.0.16。
1)解压
unzip Video_Codec_SDK_12.0.16.zip
2)复制到相应的目录
cd Video_Codec_SDK_12.0.16
sudo cp Interface/* /usr/local/cuda/include
sudo cp Lib/linux/stubs/x86_64/* /usr/local/cuda/lib64/stubs
3.下载cuda
下载与显卡驱动相适配的地址,下载地址:CUDA Toolkit Archive | NVIDIA Developer
显卡驱动查询:
nvidia-smi
如,我的显卡驱动为:
下载CUDA的版本不能超过11.7
4.编译gst-plugins-bad
1)生成Makefile
cd gst-plugins-bad
./autogen.sh
2)配置
NVENCODE_LIBS="-L/usr/local/cuda/lib64/stubs" \
NVENCODE_CFLAGS="-I/usr/local/cuda/include" \
./configure --enable-nvdec --enable-nvenc --enable-openh264 --with-cuda-prefix="/usr/local/cuda-10.2"
我这里的cuda版本为10.2。
3)编译与安装
//decoder
cd sys/nvdec
make -j4
sudo make install
//encoder
cd sys/nvenc
make -j4
sudo make install
默认安装位置:/usr/local/lib/gstreamer-1.0
4)添加环境变量
echo export GST_PLUGIN_PATH="/usr/local/lib/gstreamer-1.0" >> ~/.bashrc
source ~/.bashrc
5)检查插件
gst-inspect-1.0 nvdec
gst-inspect-1.0 nvh264enc
5.测试
软解码:
gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! queue ! h264parse ! avdec_h264 ! autovideosink
硬解码:
gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! queue ! h264parse ! nvdec ! glimagesink sync=false
可以通过
nvidia-smi
查看程序是否在其中,另外,若调用gst-launch-1.0出现错误时,可采用
GST_DEBUG=3 gst-launch-1.0 --gst-debug-level=4
进行错误追踪。