linux笔记(10):ubuntu环境下,基于SDL2运行lvgl+ffmpeg播放mp4

2023-10-27


参考文章:
1.百问网: 3rd party libraries(第 3 方库) » FFmpeg support
效果:

linux-sdl-lvlg-ffmpegmp4

1.ubuntu安装ffmpeg

1.1 源码安装

1.1 克隆ffmpeg源码

git clone https://github.com/FFmpeg/FFmpeg.git

1.2 配置编译条件,编译,安装

#1.配置
./configure --disable-all --disable-autodetect --disable-podpages --disable-asm --enable-avcodec --enable-avformat --enable-decoders --enable-encoders --enable-demuxers --enable-parsers --enable-protocol='file' --enable-swscale --enable-zlib
#2.编译
make
#3.安装
sudo make install 

1.2 直接安装依赖包

我由于先安装了源码,再安装依赖包,现在都不知道是不是直接安装依赖包就可以了。
2023年3月12日,在家里的电脑测试了一下不用编译安装源码,只安装依赖包,就可以正常使用SDL2和FFmpeg。

sudo apt install libsdl2-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libswresample-dev

2.下载lvgl源码

2.1 测试原始代码

使用这个版本https://github.com/lvgl/lv_port_pc_eclipse的源码。

#1.下载源码
git clone https://github.com/lvgl/lv_port_pc_eclipse.git
#2.进入目录
cd lv_port_pc_eclipse
#3.下载子模块
git submodule update  --init --recursive

此时,默认显示配置使用SDL,可以直接编译运行,默认运行《lv_demo_widgets()》:
在这里插入图片描述
lv_port_pc_eclipse 目录下,直接编译,运行:

#1.编译
make
#2.运行,SDL需要管理员权限
sudo ./demo

2.2 运行lv_example_ffmpeg_2()例程

2.2.1 配置 LV_USE_FFMPEG 为 1

在顶层目录下的 《lv_conf.h》 配置 LV_USE_FFMPEG 为 1:
在这里插入图片描述

2.2.2 lv_example_ffmpeg_2()替换lv_demo_widgets()

//    lv_demo_widgets();
  lv_example_ffmpeg_2();

2.2.3 链接库增加ffmpeg的库目录和库名

lv_port_pc_eclipse 目录下,修改Makefile,增加红框的内容:

LDLIBS	 			:= -lSDL2 -lm -L/uar/local/ffmpeg/lib -lavutil -lavformat -lavcodec -lswscale -lswresample 

在这里插入图片描述

2.2.4 《lv_ffmpeg.c》增加一行代码 av_register_all()

《lvgl\src\extra\libs\ffmpeg\lv_ffmpeg.c》 需要增加一行代码,才能正常工作:
在这里插入图片描述
在上面的函数中,没有av_register_all()就会导致avformat_open_input()出错;或许av_register_all()应该放置在更合理的地方(比如ffmpeg初始化时),放置这里只是临时解决方案。
从上面图片中689行的代码:

  if(avformat_open_input(&(ffmpeg_ctx->fmt_ctx), path, NULL, NULL) < 0) {

可以推断,视频文件的路径path是linux系统路径,不用理会lvgl自身的路径。

2.2.5 视频文件传入路径

本例程中,使用的文件系统驱动是STDIO ,lvgl自身的文件目录的命名都没有起作用,直接使用ubuntu的文件目录。
在这里插入图片描述
比如我播放的视频是 bird.mp4 ,在ubuntu中的路径是 /mnt/hgfs/linux-D1/app/birds.mp4,直接传入例程:

void lv_example_ffmpeg_2(void)
{
    /*birds.mp4 is downloaded from http://www.videezy.com (Free Stock Footage by Videezy!)
     *https://www.videezy.com/abstract/44864-silhouettes-of-birds-over-the-sunset*/
    lv_obj_t * player = lv_ffmpeg_player_create(lv_scr_act());
    lv_ffmpeg_player_set_src(player, "/mnt/hgfs/linux-D1/app/birds.mp4");
    lv_ffmpeg_player_set_auto_restart(player, true);
    lv_ffmpeg_player_set_cmd(player, LV_FFMPEG_PLAYER_CMD_START);
    lv_obj_center(player);
}

在这里插入图片描述

3.源码链接及编译方法

https://gitee.com/huangweide001/lvgl-ffmpeg
编译本源码时,只需安装1.2节的依赖包,修改mp4文件的目录:

在这里插入图片描述
lv_example_ffmpeg_2() 位于 lvgl-ffmpeg/lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_2.c 文件中。
lvgl-ffmpeg 目录下,直接编译,运行即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux笔记(10):ubuntu环境下,基于SDL2运行lvgl+ffmpeg播放mp4 的相关文章

  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • BASH 中的空函数

    我正在使用 FPM 工具创建 deb 包 此工具在从支持的文件中删除包之前 之后创建 不幸的是FPM生成的bash脚本包含这样的函数 dummy 该脚本退出时出现错误 语法错误 意外 BASH 不允许空函数吗 哪个版本的 bash linu
  • PostgreSQL 错误:无法连接到数据库 template1:​​无法连接到服务器:没有这样的文件或目录

    我需要创建数据库 首先我运行 sudo su postgres then createdb test 我不断收到此错误 createdb could not connect to database template1 could not c
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • id3 图像编辑后播放 mp3 时遇到问题

    由于硬件限制 我们生产的软件试图确保导入到其库中的任何音频文件 准备复制到硬件上 都是可接受的比特率 最近 我们开始使用 FFmpeg 将许多不同的音频类型转换为 mp3 以便在我们的硬件上导入和使用它们 虽然转换工作正常并且 mp3 文件
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav
  • 通过名称获取进程ID

    我想在 Linux 下获得一个给定其名称的进程 ID 有没有一种简单的方法可以做到这一点 我还没有在 C 上找到任何可以轻松使用的东西 如果追求 易于使用 char buf 512 FILE cmd pipe popen pidof s p
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security

随机推荐

  • SegNetr: 重新思考 U 形网络中的局部-全局交互和跳过连接

    SegNetr 会议分析 摘要 贡献 方法 整体框架 1 SegNetr Block 2 Information Retention Skip Connection 实验 1 对比实验 2 消融实验 2 1 Effect of local
  • tslib移植的问题:No raw modules loaded.ts_config:No such file or directory

    1 在开发板上运行校正程序时出现No raw modules loaded 解决方法是把 tslib etc目录下的ts conf 的 module raw input 的注释符号 去掉 但记住不要在前面留有 空格 否则会出现错误Segme
  • python 打开读取文件 出现异常 关闭文件的处理(世界上没有傻问题!但我是个傻子)

    事情梗概 try 尝试读取一个不存在的文件 except Exception as e 打印异常 finally 关闭文件 但是关闭文件时报异常 算了 看代码吧 try f open file name rb file data f rea
  • Vue.js的组件化开发

    组件化开发 什么是组件 web中的组件其实就是页面组成的一部分 好比是电脑中的每一个元件 如硬盘 键盘 鼠标 它是一个具有独立的逻辑和功能或界面 同时又能根据规定的接口规则进行相互融化 变成一个完整的应用 页面就是由一个个类似这样的组成部分
  • iOS开源系列——下拉刷新控件

    EGOTableViewPullRefresh FaceBook开源控件 下拉刷新的鼻祖 SVPullToRefresh 下拉刷新控件 MJRefresh 比较好用的下拉刷新 可以自定义上下拉刷新的文字说明 具体使用看 使用方法 国人写 X
  • 中间件的分类和作用

    要说清这个问题我们用一个生活中的实例来比喻 把分布式系统看作北京市区的交通系统 网络看作市区马路 通过交通工具 汽车 实现通信 每分钟将有几万辆车在马路上行驶 如果没有相应的交通设施和管理规划 北京市将会乱成一团 发生各种交通事故 1 通信
  • java各种报错汇总与分析

    1 没有找到pom文件 需要设置版本号 在这里插入图片描述 https img blog csdnimg cn 20210720112611634 png pic center 解决办法 https blog csdn net SSband
  • 从2023蓝帽杯0解题heapSpary入门堆喷

    从2023蓝帽杯0解题heapSpary入门堆喷 关于堆喷 堆喷射 Heap Spraying 是一种计算机安全攻击技术 它旨在在进程的堆中创建多个包含恶意负载的内存块 这种技术允许攻击者避免需要知道负载确切的内存地址 因为通过广泛地 喷射
  • adb shell 小米手机_【ADB命令实战】免ROOT停用小米手机系统应用

    对于未解锁的手机 总存在那么一些我们用不到 甚至看都不想看到的应用 但是没办法卸载 在这里提供一些禁用掉这些应用的方法供参考 本内容是以小米的MIUI系统为例 其他品牌机型不确保可以成功 毕竟系统应用的包名是不一样的 需要自己去发现 1 打
  • linux-hd.c

    linux kernel hd c C 1991 Linus Torvalds This is the low level hd interrupt support It traverses the request list using i
  • 数据结构与算法课程笔记(二)

    实验二 线性表的顺序存储结构实现 一 实验目的 二 实验内容 一 实验目的 熟悉VC 工程项目的文件组织方式 线性表中数据元素间的关系及其顺序存储结构方式表示方法 顺序表的操作方法与接口函数的设计方法 二 实验内容 1 利用本次实验提供的文
  • element input复合框 修改下拉框样式

    element input复合框 修改下拉框样式 1 项目中经常会遇到修改ui组件库样式的问题 elemetui官网自带样式是这样的 我想修改选中颜色 以及背景颜色 这样设置发现不生效 加上 popper append to body fa
  • python 翻译模块 翻译API使用(百度、有道、谷歌)

    1 翻译模块 api使用分析 1 translate库 使用简单 但是有次数限制 翻译的准确性中等 2 百度api 推荐使用 代码简单 有模块 但是需要注册 获取key值 翻译的准确性中下 3 chrome翻译api 代码复杂 次数限制 但
  • java8的常用的新特性

    Java 8引入了许多新的特性 下面列举了一些常用的新特性 Lambda表达式 Lambda表达式是Java 8中引入的一种函数式编程特性 提供了一种更简洁和灵活的方式来编写匿名函数 方法引用 方法引用允许直接引用已经存在的方法作为Lamb
  • 华为od机试面试题目

    1 华为机试102道题解 2 华为机考题目 2023年7月30日 19 30 22 00 机考提示 注意事项 考前必看 1 注意编译环境的变化及语言选择 选自己熟悉的语言机考 2 机考共3道题 150分钟完成 3 题目难度为 一星和两星 2
  • JS——Mediator(中介者)模式

    我们从日常的生活中打个简单的比方 我们去房屋中介租房 房屋中介人在租房者和房东出租者之间形成一条中介 租房者并不关心他租谁的房 房东出租者也不关心他租给谁 因为有中介的存在 这场交易才变得如此方便 在软件的开发过程中 势必会碰到这样一种情况
  • 自己定义控件

    http blog csdn net lmj623565791 article details 38173061
  • qt信号槽连接方式Qt::UniqueConnection的使用

    qt信号槽连接方式Qt UniqueConnection的使用 qt信号槽连接方式一共有以下五种 具体方式不在一一赘述 本文记录第五种Qt UniqueConnection的使用方法 Qt AutoConnection Qt DirectC
  • 机器学习的训练数据(Training Dataset)、测试数据(Testing Dataset)和验证数据(Validation Dataset)

    三者的意义 训练数据 用来训练模型的数据 验证数据 用来检验模型准确率 测试数据 再一次确认验证数据集中的模型是好的模型 一般步骤 测试数据集和验证数据的数据一定不能用来训练 否则会出现过拟合的现象 代码 import math impor
  • linux笔记(10):ubuntu环境下,基于SDL2运行lvgl+ffmpeg播放mp4

    文章目录 1 ubuntu安装ffmpeg 1 1 源码安装 1 1 克隆ffmpeg源码 1 2 配置编译条件 编译 安装 1 2 直接安装依赖包 2 下载lvgl源码 2 1 测试原始代码 2 2 运行lv example ffmpeg