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* 版本都匹配,说明共享库也被正确加载了(不是静态链接)

相关推荐
Web3探索者17 小时前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo19 小时前
Linux系统中网线与USB网络共享冲突
linux
荣--2 天前
在 strip 二进制 + 基址随机化的栈里做崩溃去重 —— 三阶段算法与一行 Crash Flag
嵌入式·崩溃分析·栈指纹·去重算法
释然小师弟2 天前
Android开发十年:反思与回顾
android·后端·嵌入式
Sokach10152 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
FreakStudio3 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
AlfredZhao3 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3104 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒6 天前
TShark:Wireshark CLI 功能
linux