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

目录

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生效

报错:

创建该文件夹

參考:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/379414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenShift AI - 运行欺诈检测模型和流程

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.14 RHODS 2.50 的环境中验证 文章目录 准备运行环境安装 OpenShift AI 环境安装 Minio 对象存储软件创建 Data Science Project创建 Data connection创建 Workbench配置 Model server创建 …

Unity类银河恶魔城学习记录5-1.5-2 P62-63 Creating Player Manager and Skill Manager源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerManager.cs using System.Collections; using System.Collections.G…

CODE V的API 之 ThirdAberration(初级像差的获取)数据的获取(4)

像差的变化数据提取 文章目录 像差的变化数据提取前言一、主要目标二、主要代码1.VBA代码2.CODE V macro 输出结果 前言 在优化过程中,相差的观察非常重要,尤其是镜片变多以后哪一面的曲率,厚度以及非球面系数的变化对像差的影响需要总结&am…

GPT-4模型中的token和Tokenization概念介绍

Token从字面意思上看是游戏代币,用在深度学习中的自然语言处理领域中时,代表着输入文字序列的“代币化”。那么海量语料中的文字序列,就可以转化为海量的代币,用来训练我们的模型。这样我们就能够理解“用于GPT-4训练的token数量大…

Mybatis中的sql-xml延迟加载机制

Mybatis中的sql-xml延迟加载机制 hi,我是阿昌,今天记录一下关于Mybatis中的sql-xml延迟加载机制 一、前言 首先mybatis技术本身就不多介绍,说延迟加载机制之前,那要先知道2个概念: 主查询对象关联对象 假设咱们现…

Kubernetes实战(二十七)-HPA实战

1 HPA简介 HPA 全称是 Horizontal Pod Autoscaler,用于POD 水平自动伸缩, HPA 可以 基于 POD CPU 利用率对 deployment 中的 pod 数量进行自动扩缩容(除了 CPU 也可以基于自定义的指标进行自动扩缩容)。pod 自动缩放不适用于无法…

AI:123-基于机器学习的行人行为分析与异常检测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

伯克利研究院推出Ghostbuster用于检测由LLM代笔的文本

Ghostbuster的架构,用于检测人工智能生成文本的最先进的新方法 像 ChatGPT 这样的大型语言模型写得非常好,但事实上,它们已经成为一个棘手的问题。学生们已经开始使用这些模型代写作业,导致一些学校禁止 ChatGPT。此外&#xff0c…

Git的基础操作指令

目录 1 前言 2 指令 2.1 git init 2.2 touch xxx 2.3 git status 2.4 git add xxx 2.5 git commit -m xxxx 2.5 git log及git log --prettyoneline --all --graph --abbrev-commit 2.6 rm xxx 2.7 git reset --hard xxx(含小技巧) 2.8 git reflog 2.9 mv xxx yyy 1…

vue 引入 百度地图API 和 路书

公司项目中&#xff0c;偶尔都会涉及到地图的使用&#xff0c;这里以百度地图为例&#xff0c;我们梳理一下引用流程及注意点 账号和获取密钥 百度地图示例 百度地图 类参考 1、账号和获取密钥 // api.map.baidu.com/api?typewebgl&v3.0&ak您的密钥<script type…

如何运行心理学知识(心流)来指导工作和生活

如何运用心流来指导工作和生活 如何联系我 作者&#xff1a;鲁伟林 邮箱&#xff1a;thinking_fioa163.com或vlinyes163.com GitHub&#xff1a;https://github.com/thinkingfioa/ReadingSummary 版权声明&#xff1a;文章和记录为个人所有&#xff0c;如果转载或个人学习…

Nature Machine Intelligence 使用机器学习驱动的可拉伸智能纺织手套捕捉复杂的手部动作和物体交互

研究背景 对灵巧手运动的精确实时跟踪在人机交互、元宇宙、机器人和远程医疗等领域有着广泛的应用。当前的可穿戴设备中的大多数仅用于检测精度有限的特定手势&#xff0c;并且没有解决与设备的可靠性、准确性和可清洗相关的挑战。对传感器直接放置在用户的手上有严格的要求&am…

MVC框架学习

大一的时候写过一个mvc框架的跑酷游戏&#xff0c;但是那时候基础不扎实&#xff0c;没学明白也没听懂。现在深入的学习一下 以下内容参考&#xff1a;MVC 模式 | 菜鸟教程 (runoob.com) MVC 模式 MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff…

搜索插入位置[简单]

一、题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为O(log n)的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例…

【linux开发工具】vim详解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 “学如逆水行舟&#xff0…

项目02《游戏-11-开发》Unity3D

基于 项目02《游戏-10-开发》Unity3D &#xff0c; 任务&#xff1a;飞行坐骑 首先创建脚本&#xff0c; 绑定脚本&#xff0c; using UnityEngine; public class Dragon : MonoBehaviour{ [SerializeField] private float speed 10f; public Transfo…

如何判断线程池已经执行完所有任务了?

目录 不判断的问题 方法1&#xff1a;isTerminated 缺点分析 扩展&#xff1a;线程池的所有状态 方法2&#xff1a;getCompletedTaskCount 方法说明 优缺点分析 方法3&#xff1a;CountDownLatch&#xff08;推荐&#xff09; 优缺点分析 方法4&#xff1a;CyclicBar…

微软.NET6开发的C#特性——委托和事件

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;看到不少初学者在学习编程语言的过程中如此的痛苦&#xff0c;我决定做点什么&#xff0c;下面我就重点讲讲微软.NET6开发人员需要知道的C#特性&#xff0c;然后比较其他各种语言进行认识。 C#经历了多年发展…

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…

Stable Diffusion 模型下载:Disney Pixar Cartoon Type B(迪士尼皮克斯动画片B类)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 这是我之前的模型迪士尼皮克斯卡通类型A与我自己训练的Lora在中途旅程图像上的合并结果。与之前的版本相比&#xff0c;男性和老年人看起来更像真正的皮克斯角色&a…