文章目录

  • 1.ubuntu安装ffmpeg
    • 1.1 源码安装
      • 1.1 克隆ffmpeg源码
      • 1.2 配置编译条件,编译,安装
    • 1.2 直接安装依赖包
  • 2.下载lvgl源码
    • 2.1 测试原始代码
    • 2.2 运行lv_example_ffmpeg_2()例程
      • 2.2.1 配置 LV_USE_FFMPEG 为 1
      • 2.2.2 lv_example_ffmpeg_2()替换lv_demo_widgets()
      • 2.2.3 链接库增加ffmpeg的库目录和库名
      • 2.2.4 《lv_ffmpeg.c》增加一行代码 av_register_all()
      • 2.2.5 视频文件传入路径
  • 3.源码链接及编译方法

参考文章:
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 目录下,直接编译,运行即可。

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

  1. Ubuntu环境下基于Linux进行DOL配置

    Ubuntu环境下基于Linux进行DOL配置 Description The distributed operation layer (DOL) is a framework that enable ...

  2. HaaS学习笔记 | HaaS框架环境下基于MicroPython的LED跑马灯实现及比较

    [1]题目要求 [案例]:在HaaS框架下用原生MicroPython实现LED跑马灯.       蓝蜻蜓ESP32开发板的LED灯电路连接如下:          D3灯----GPIO14,高电 ...

  3. linux sublime nodejs,Ubuntu环境下sublime3 nodejs安装与插件配置

    1.sudo add-apt-repository ppa:webupd8team/sublime-text-3 回车,出现很多信息.但是我们看看图片最后字知道,这地方在等待我们确认是否添加这个仓库, ...

  4. [Linux实用工具]Ubuntu环境下SSH的安装及使用

    SSH分为客户端和服务端. 服务端是一个守护进程,一般是sshd进程,在后台运行并响应来自客户端的请求.提供了对远程请求的处理,一般包括公共密钥认证.密钥交换.对称密钥加密和非安全连接. 客户端一般是 ...

  5. linux鼠标触摸屏应用程序,在Ubuntu环境下实现插入鼠标自动关闭触摸板

    本文将为你介绍在 Ubuntu 环境下也能实现插入鼠标自动关闭触摸板的功能. 如果你经常在笔记本上用鼠标,你就会对因为偶尔碰到触摸板而打断自己的操作而憋屈了.当你用外接鼠标的时候关闭触摸板就是一个很好 ...

  6. Linux环境下基于策略的路由

    Linux环境下基于策略的路由 原文作者:Matthew G. Marsh 原文出处:[url]http://www.sysadminmag.com/linux/articles/v09/i01/a3 ...

  7. Linux系统编程及应用——ubuntu环境下

    Linux系统编程及应用--ubuntu环境下 程序由业务逻辑和系统访问两部分构成的.其中,业务逻辑是根据业务需求,按照设计好的逻辑规则,处理信息,与系统(平台)无关的:而系统访问则是利用操作系统所提 ...

  8. linux 下 storm环境搭建,Storm在Ubuntu环境下的单机部署

    Storm在Ubuntu环境下的单机部署 目录 查看Ubuntu 安装JDK 安装Pythod 安装Zookeeper 安装ZeroMQ 安装Jzmp 安装Storm 查看Ubuntu是32位还是64 ...

  9. linux ubuntu环境下 android jdk sdk eclipse adt 以及手机连接无法识别的解决方法

    linux ubuntu环境下 android jdk sdk eclipse adt 以及手机连接无法识别到总结 1.下载jdk-6u26-linux-i586.bin并复制到在目标文件夹(例如/u ...

最新文章

  1. Linux 系统审计操作行为的 5 种解决方案
  2. altium designer无法创建工程_前端工程化之开发脚手架及封装自动化构建
  3. 用pv操作描述如下前驱图_跟我学PMP | PV、AC、EV…挣值管理的基本概念都是啥?...
  4. vue 调用mutation方法_Vuex白话教程第三讲:Vuex旗下的Mutation
  5. LINUX mount -t用法
  6. 把Python函数转换成能在SQL语句中调用的函数
  7. 如何查看mysql数据库中各个表的大小
  8. matlab2012安装过程中退出,Matlab 2012安装图解
  9. vue和bootstrap-switch结合坑
  10. 大唐移动骨干集体出走
  11. Delphi ArcEngine 创建梯度专题 Proportional
  12. 基于.net5.0常用开源组件Xman
  13. 【 Vue 】暗黑模式切换
  14. 孙溟㠭先生书画艺术《贵妃》
  15. 5G NR 网络切片是什么意思
  16. 和互联网公司服务器有关的一些情况
  17. 3ds MAX 2014安装指南
  18. 控制BLDC资料汇总
  19. android 系统复位(Reset 恢复出厂设置)9.0源码分析
  20. 微型计算机硬件分为,微型计算机的硬件组成

热门文章

  1. Java Web项目 慧心人力资源管理系统
  2. html 图片在一个div中放大缩小效果
  3. html4可以class,class4:HTML入门.ppt
  4. 一个好看美观的登录注册界面的实现
  5. 你还记得小时候怎么吃药的吗?
  6. loj6244 七选五
  7. 删除节点removeChild()
  8. mysql将年分解到月_sql把一段时间分割成周,月,季度,年的时间段
  9. 【Python】WPS、Excel表格处理(二) xlwt模块(xlsxwriter模块)
  10. 微粒贷小贴士:了解网络虚假APP诈骗套路,以防上当受骗