玩转rk3588(六):rk3588使用ffmpeg实现硬件解码,解决opencv中VideoCapture获取网络摄像头视频时,一直在open时返回false的问题(一)

本文档介绍了在rk3588平台上,如何使用ffmpeg实现硬件解码来解决opencv的VideoCapture在打开网络摄像头时失败的问题。详细步骤包括安装rkmpp、x264、libdrm和ffmpeg,以及处理libdrm编译错误和ffmpeg运行时依赖问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0、前言

1、开发环境

2、安装rkmpp

3、安装x264

4、安装libdrm

5、安装ffmpeg

6、相关报错

1)libdrm编译过程中报错

2)ffmpeg: error while loading shared libraries: libavdevice.so.60: cannot open shared object file: No such file or directory

參考:


0、前言

  • 在使用opencv的VideoCapture获取网络摄像头视频时,一直在open时返回false。原因在与opencv编译过程中没有ffmpeg。
  • rk3588使用ffmpeg实现硬件解码

1、开发环境

开发环境软件版本/配置
开发板firefly rk3588J 
操作系统

openEuler 20.03 LTS

python版本3.9.18

2、安装rkmpp

git clone https://github.com/rockchip-linux/mpp
cd mpp/build/linux/aarch64  
./make-Makefiles.bash
make -j8
sudo make install

 RK3588编译RKMPP库+编解码测试_linux_iTOYUNA-华为云开发者联盟

3、安装x264

git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix=/usr/local/my/x264 --disable-opencl --enable-static --enable-shared
make -j8
sudo  make install

4、安装libdrm

wget https://dri.freedesktop.org/libdrm/libdrm-2.4.89.tar.bz2
tar -jxvf libdrm-2.4.89.tar.bz2
cd libdrm-2.4.89
./configure --prefix=/usr/local/my/libdrm --host=aarch64-linux-gnu
make -j8
sudo make install

解压
–prefix 指定安装目录
–host 当前编译工具链的前缀 ll /usr/bin/gcc*查看

5、安装ffmpeg

git clone https://git.ffmpeg.org/ffmpeg.git 
cd ffmpeg
./configure --prefix=/usr/local/my/ffmpeg --enable-version3 --enable-libdrm --enable-rkmpp --enable-libx264 --enable-nonfree --enable-gpl --enable-shared

–enable-gpl 允许使用GPL代码,生成的库和二进制文件将在GPL下[no]
–enable-version3 升级(L)GPL到版本3 [no]
–enable-nonfree 允许使用非自由代码,生成的库 和二进制文件将是不可分发的[不]

--enable-shared 一定要加上,否则opencv编译安装时报错

设置PKG_CONFIG_PATH

方法一:

sudo find / -name pkgconfig
找到需要的x264 libdrm的pkgconfig文件夹,rockchip_mpp.pc 被安装在了/usr/local/lib/pkgconfig这

export PKG_CONFIG_PATH=/usr/local/my/x264/lib/pkgconfig:/usr/local/my/libdrm/lib/pkgconfig:/usr/local/lib/pkgconfig
查看一下

echo $PKG_CONFIG_PATH
/usr/local/my/x264/lib/pkgconfig:/usr/local/my/libdrm/lib/pkgconfig:/usr/local/lib/pkgconfig

方法二(建议):

sudo vim /etc/ld.so.conf

添加如下内容 

include /etc/ld.so.conf.d/*.conf
#复制下面内容
/usr/local/lib #librockchip_mpp.so
/usr/local/my/x264/lib #lib264.so

/usr/local/my/libdrm/lib

sudo ldconfig
sudo vim ~/.bashrc

export PATH=$PATH:/usr/local/my/ffmpeg/bin

source ~/.bashrc

查看一下系统PATH,可以看到已经将ffmpeg添加好了


重新编译

./configure --prefix=/usr/local/my/ffmpeg --enable-version3 --enable-libdrm --enable-rkmpp --enable-libx264 --enable-nonfree --enable-gpl --enable-shared
make -j8
sudo make install

执行ffmpeg

查看支持的编解码器

ffmpeg configure -codecs | grep h264

6、相关报错

1)libdrm编译过程中报错

/ffmpeg/libdrm-2.4.89/nouveau/privateh:13: multiple definit ion of "nouveau debug':; .libs/nouveau.o
collect2: error: ld returned 1 exit status
make[2]: ***[Makefile:654: libdrm_nouveau.la] Error 1

make[1]: ***[Makefile:821: all-recursive] Error 1


原因

新版gcc不支持缺省extern。

解决方案:

修改nouveau/private.h中的drm_private uint32_t nouveau_debug;如下:

-drm_private uint32_t nouveau_debug;
+drm_private extern uint32_t nouveau_debug;

2)ffmpeg: error while loading shared libraries: libavdevice.so.60: cannot open shared object file: No such file or directory

确定/etc/ld.so.conf的配置生效

sudo vim /etc/ld.so.conf

include /etc/ld.so.conf.d/*.conf
#复制下面内容
/usr/local/lib #librockchip_mpp.so
/usr/local/my/x264/lib #lib264.so

/usr/local/my/libdrm/lib

执行sudo ldconfig生效

报错:

创建该文件夹

安装6版本

 configuration: --prefix=build --arch=arm64 --enable-gpl --enable-libx264 --enable-libdrm --enable-rkmpp --enable-version3 --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-decoder=h264_v4l2m2m --disable-decoder=vp8_v4l2m2m --disable-decoder=mpeg2_v4l2m2m --disable-decoder=mpeg4_v4l2m2m --enable-shared --enable-rkrga --enable-nonfree
 

參考:

rk3588 ffmpeg使用硬件解码-CSDN博客

rk板子linux系统安装rga,drm,mpp_rkdrm 安装-CSDN博客

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值