因为我需要ffmpeg支持ffplay功能,一般默认的ffmpeg编译出来的都是不带ffplay,需要依赖库sdl2库,可能还需要其他功能,编解码h264时可能就需要x264库,一个一个编译依赖库太麻烦啦。所以我想到用buildroot来构建ffmpeg。
需求:我的开发板环境是Ubuntu-base16-04系统,已经安装好alsa相关工具,我也不想替换整个根文件系统,只拷贝ffmpeg的bin文件和库文件。这里使用buildroot编译出来的没有带头文件,哪位仁兄知道也可以在评论区指点一下。
首先是buildroot源码网址,https://buildroot.org/,
点击download,
我选的是长期支持版,2024.02.06.
接下来就是解压源码到Ubuntu,我的Ubuntu版本为18.04,
执行make menuconfig打开图形配置界面。
以下就是一些具体的配置:
以上是对目标平台的一些配置还是比较好理解。
以上就是对于交叉编译链的配置,一般都是选择自己本地的交叉编译链。
进入上述图片箭头所指的位置,
播放mp3文件需要libmp3lame库,所以需要选中lame。
然后进入ffmpeg,我是全选。
因为我的开发板是alsa框架,所以进入libraries.
因为我需要编解码h264功能,所以需要x264库。
上述alsa-lib全选,因为我的开发板本来就有alsa环境,所以不做详细说明。
以上为我的所有配置。正常编译出来的根文件系统路径是buildroot-2024.02.6/output/images
拷贝解压rootfs.tar,把usr路径下的lib和bin拷贝到自己的路径,然后移植到开发板即可。
然而按照上述方法编译出来的ffplay,一直报sun4i-i2s 1c22800.i2s: ASoC: can't set 1c22800.i2s hw params: -22,这里我选择升级sdl2库的版本,这个buildroot编译的ffmpeg版本为4.4.4,默认的sdl2库版本为2.28.5,这里我选择2.30.5,至于为什么选2.30.5这个版本是因为之前的交叉编译ffmpeg4.3.8版本时用的就是这个版本的sdl2库,是可以的,所以自然而然就选择这个版本。
因为系统默认的版本是2.28.5,所以我需要修改版本。
进入buildroot-2024.02.6/package/sdl2,编辑sdl2.mk.
进入buildroot-2024.02.6/package/sdl2,编辑sdl2.hash
其中关于sha256哈希值的计算我用到的指令是openssl dgst -sha256 SDL2-2.30.5.tar.gz
其中LICENSE.txt文件是SDL2-2.30.5.tar.gz。
其中有一些小建议点,要是下载的软件包速度太慢啦,可以自己手动下载,下载下来放在路径为
buildroot-2024.02.6/dl对应的模块文件夹下,以sdl2举例如下:
经过上述一系列操作之后我的ffplay功能终于得偿所愿,所以记录一下,算是避坑,也分享给大家参考。