imx6ull开发板 移植 ffmpeg 4.2.11 + x264 视频编码库

因为虚拟机的交叉编译器是 Linaro GCC 4.9.4,编译不了新版的 ffmpeg(4.3+ 需要 C11,5.0+ 需要 C17)

所以,FFmpeg 版本:选择下载 ffmpeg 4.2.11,在虚拟机编译 动态库版 FFmpeg,移植到开发板。

FFmpeg 是一个多媒体框架,本身支持各种编解码器,但它不自带 x264 的 H.264 编码实现(出于

专利和 GPL 许可考虑)。

x264 是开源的 H.264(也叫 AVC)视频编码库。

如果希望 FFmpeg 能够生成 H.264 视频(例如做视频推流、录像),就必须让它链接 x264,所以,需要先编译 x264 并提供给 FFmpeg。

第一步:编译 x264

  1. 下载 x264 源码

git clone --branch stable https://code.videolan.org/videolan/x264.git

  1. 进入目录: cd x264

x264 配置交叉编译:

下面的路径 /home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm 根据自己的实际安装路径修改

命令行输入下面的命令,按回车

复制代码
./configure \
 --host=arm-linux \
 --cross-prefix=arm-linux-gnueabihf- \
 --prefix=/home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm \
 --enable-static \
 --disable-opencl \
 --disable-cli \
 --enable-pic
  1. 编译安装

make -j4

make install

第二步:编译 ffmpeg

  1. 下载 ffmpeg 4.2.11

wget https://ffmpeg.org/releases/ffmpeg-4.2.11.tar.xz

  1. 解压:

tar xf ffmpeg-4.2.11.tar.xz

3.进入目录

cd ffmpeg-4.2.11

ffmpeg 4.2.11 配置交叉编译:

下面的4个路径 /home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm 根据自己的实际安装路径修改

命令行输入下面的命令,按回车

export PKG_CONFIG_PATH=/home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm/lib/pkgconfig:$PKG_CONFIG_PATH

然后,命令行输入下面的命令,按回车

复制代码
./configure \
    --enable-cross-compile \
    --arch=arm \
    --cpu=cortex-a7 \
    --target-os=linux \
    --cross-prefix=arm-linux-gnueabihf- \
    --enable-gpl \
    --enable-libx264 \
    --extra-cflags="-I/home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm/include" \
    --extra-ldflags="-L/home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm/lib" \
    --enable-avdevice \
    --enable-indev=v4l2 \
    --enable-muxer=mpegts \
    --enable-muxer=rtp \
    --enable-protocol=udp \
    --enable-protocol=rtp \
    --disable-doc \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-debug \
    --enable-shared \
    --disable-static \
    --prefix=/home/leo/linux_c/tool/ffmpeg-4.2.11-install-arm
  1. 编译安装

make -j4

make install

进入自己的ffmpeg安装目录,查看,然后移植到开发板

|----------------------|------------------------------------|-------------------|
| 源目录 (虚拟机) | 目标目录 (开发板) | 说明 |
| bin/ffmpeg | /usr/local/bin/ 或 /opt/ffmpeg/bin/ | 主程序 |
| lib/libav*.so* | /usr/local/lib/ 或 /opt/ffmpeg/lib/ | FFmpeg 核心动态库及符号链接 |
| lib/libsw*.so* | /usr/local/lib/ 或 /opt/ffmpeg/lib/ | FFmpeg 核心动态库及符号链接 |
| lib/libpostproc.so* | /usr/local/lib/ 或 /opt/ffmpeg/lib/ | 后处理动态库 |

在虚拟机 NFS 挂载的开发板根文件系统,直接拷贝到开发板的根文件系统中。

移植 ffmpe 主程序

sudo cp bin/ffmpeg /home/leo/linux/nfs/ubuntu_rootfs/usr/local/bin/ -f

移植 FFmpeg 核心动态库及符号链接

sudo cp -a lib/libav*.so* /home/leo/linux/nfs/ubuntu_rootfs/usr/local/lib/ -f

sudo cp -a lib/libsw*.so* /home/leo/linux/nfs/ubuntu_rootfs/usr/local/lib/ -f

sudo cp -a lib/libpostproc.so* /home/leo/linux/nfs/ubuntu_rootfs/usr/local/lib/ -f

赋予可执行权限(以防万一)

sudo chmod +x /home/leo/linux/nfs/ubuntu_rootfs/usr/local/bin/ffmpeg

移植完毕。

在开发板上更新动态库缓存

  1. 把 /usr/local/lib 添加到动态链接器的搜索路径里。

echo "/usr/local/lib" >> /etc/ld.so.conf

  1. 刷新动态链接库缓存,扫描 ld.so.conf 指定的路径,把所有共享库的信息缓存起来。

ldconfig

  1. 验证是否部署成功

ffmpeg -version

输出显示 FFmpeg 已经成功编译,支持 V4L2 输入、x264 编码、UDP/RTP 协议等。

显示 libav* 版本都匹配,说明共享库也被正确加载了(不是静态链接)

相关推荐
美狐美颜sdk9 分钟前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
揽秀亭长1 小时前
从音频到五线谱|扒谱过程中的关键技术环节
人工智能·音视频
广州浮点FLOATLIC2 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding2 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK2 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2082 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)3 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6253 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
xh didida4 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
G.E.M.小白5 小时前
【Linux嵌入式蜂鸣器驱动开发】原理图分析、寄存器寻址、完整驱动+应用+Makefile
嵌入式·imx6ull·linux驱动开发·蜂鸣器驱动