文章目录
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.源码链接及编译方法
linux-sdl-lvgl-ffmpegmp4
1.ubuntu安装ffmpeg
1.1 源码安装
1.1 克隆ffmpeg源码
git clone https://github.com/FFmpeg/FFmpeg.git
1
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
3
4
5
6
1.2 直接安装依赖包
我由于先安装了源码,再安装依赖包,现在都不知道是不是直接安装依赖包就可以了。
2023年3月12日,在家里的电脑测试了一下不用编译安装源码,只安装依赖包,就可以正常使用SDL2和FFmpeg。
sudo apt install libsdl2-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libswresample-dev
1
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
1
2
3
4
5
6
此时,默认显示配置使用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();
1
2
2.2.3 链接库增加ffmpeg的库目录和库名
在 lv_port_pc_eclipse 目录下,修改Makefile,增加红框的内容:
LDLIBS := -lSDL2 -lm -L/uar/local/ffmpeg/lib -lavutil -lavformat -lavcodec -lswscale -lswresample
1
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) {
1
可以推断,视频文件的路径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 目录下,直接编译,运行即可。