在网上捣鼓了半天,资料很少,官网给的是软件解码编码的方法,CPU 的占用会很大,下面我会简单说一下我的脚本,以及使用官方提供的资料最后编译出来的库,直接供小伙伴使用。
这个地方感谢一下豆包的帮助,虽然最后一个问题误导了一下坑了我俩天。
下面正式开始。

这个是我的所有的关于需要硬解码的资源,这个expat忘记这个文件有没有作用了,部分有脚本的我也会提供出来。
libdrm-2.4.114这个文件,我没有做脚本,因为这个编译的时候环境就整了好一会。
mpp-develop脚本文件,根据需要自己改
#!/bin/bash
# --- 1. 定义变量 ---
# 设置 MPP 的安装位置 (编译产物存放目录)
PREFIX="./mppbuild"
# 交叉编译器bin路径 (请根据你的虚拟机环境修改此路径)
# 使用 `which aarch64-linux-gnu-gcc` 命令可以帮助你找到这个路径
TOOLCHAIN_DIR="/opt/gcc-aarch64-linux-gnu/bin"
# 工具链前缀,用于指定交叉编译工具
TOOLCHAIN="$TOOLCHAIN_DIR/aarch64-linux-gnu-"
# --- 2. 配置 (使用 cmake) ---
echo "正在配置 Rockchip MPP..."
# MPP 推荐在一个独立的 'build' 目录中进行编译,以保持源码树干净
mkdir -p build && cd build
# 运行 cmake 命令来配置项目
cmake .. \
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
-DCMAKE_C_COMPILER="${TOOLCHAIN}gcc" \
-DCMAKE_CXX_COMPILER="${TOOLCHAIN}g++" \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_RK_VPU=OFF
# 检查 cmake 的返回状态
if [ $? -ne 0 ]; then
echo "错误:配置 Rockchip MPP 失败。"
exit 1
else
echo "配置成功。"
fi
# --- 3. 编译 ---
echo "正在编译 Rockchip MPP..."
# 使用 nproc 获取处理器核心数,以确定并行编译的进程数
make -j$(nproc)
# 检查编译的返回状态
if [ $? -ne 0 ]; then
echo "错误:编译 Rockchip MPP 失败。"
exit 1
else
echo "编译成功。"
fi
# --- 4. 安装 ---
echo "正在安装 Rockchip MPP..."
make install
# 检查安装的返回状态
if [ $? -ne 0 ]; then
echo "错误:安装 Rockchip MPP 失败。"
exit 1
else
echo "安装成功。"
fi
# --- 5. 清理 ---
echo "正在清理构建目录..."
make clean
# 返回到上一级目录 (mpp-develop)
cd ..
# 检查清理的返回状态
if [ $? -ne 0 ]; then
echo "警告:清理构建目录失败。"
else
echo "构建过程完成。所有产物已安装到 ${PREFIX} 目录。"
fi
# 脚本正常退出
exit 0
FFMPEG 的脚本
# 定义前缀目录
PREFIX="./ffmpeg_rk_build"
# x264安装目录的绝对路径
X264_BUILD_DIR="/home/book/software/x264/x264build"
X264_INCLUDE_DIR="$X264_BUILD_DIR/include"
X264_LIB_DIR="$X264_BUILD_DIR/lib"
# MPP安装目录的绝对路径
MPP_BUILD_DIR="/home/book/software/mpp-develop/build/mppbuild"
MPP_INCLUDE_DIR="$MPP_BUILD_DIR/include"
MPP_LIB_DIR="$MPP_BUILD_DIR/lib"
# DRM安装目录的绝对路径
DRM_BUILD_DIR="/home/book/software/libdrm-2.4.114/install"
DRM_INCLUDE_DIR="$DRM_BUILD_DIR/include"
DRM_LIB_DIR="$DRM_BUILD_DIR/lib"
# 设置 PKG_CONFIG_PATH 环境变量
export PKG_CONFIG_PATH=$X264_LIB_DIR/pkgconfig:$MPP_LIB_DIR/pkgconfig:$DRM_LIB_DIR/pkgconfig:$PKG_CONFIG_PATH
echo "配置环境变量:"
echo "export PKG_CONFIG_PATH=$X264_LIB_DIR/pkgconfig:$MPP_LIB_DIR/pkgconfig:$DRM_LIB_DIR/pkgconfig:$PKG_CONFIG_PATH"
echo "正在配置./configure..."
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--enable-cross-compile \
--arch=arm64 \
--disable-stripping \
--target-os=linux \
--cc=aarch64-linux-gnu-gcc \
--enable-libx264 \
--enable-rkmpp \
--enable-version3 \
--enable-libdrm \
--extra-cflags="-I$X264_INCLUDE_DIR -I$MPP_INCLUDE_DIR -I$DRM_INCLUDE_DIR" \
--extra-ldflags="-L$X264_LIB_DIR -L$MPP_LIB_DIR -L$DRM_LIB_DIR" \
--pkg-config-flags="--static" \
--extra-libs="-lpthread -lm" \
--enable-gpl \
--enable-pic \
--enable-nonfree \
--enable-pthreads
# 检查 ./configure 是否成功
if [ $? -eq 0 ]; then
echo "./configure配置成功!"
else
echo "./configure配置失败!请检查您的环境!!!"
fi
# 运行 make
echo "正在编译 ffmpeg-rockchip..."
# 使用 nproc 获取处理器核心数,以确定并行编译的进程数
make -j$(nproc)
if [ $? -eq 0 ]; then
echo "Make成功!!!"
else
echo "Make失败!!请检查错误信息,清除错误之后再次尝试!!"
exit 1
fi
# 运行 make install
echo "正在安装 ffmpeg-rockchip..."
make install
if [ $? -eq 0 ]; then
echo "Make intall 安装成功!!!!"
echo "============================================="
echo "ffmpeg_rk 被安装在$PREFIX!"
echo "============================================="
else
echo "Make install 安装失败!!请检查错误信息,清除错误之后再次尝试!!"
exit 1
fi
# 清理构建目录
echo "正在清理..."
make clean
# 检查清理的返回状态
if [ $? -ne 0 ]; then
echo "警告:清理构建目录失败。"
else
echo "构建过程完成。"
fi
# 脚本正常退出
exit 0
这个脚本让豆包改也整了半天,最后选择自己修改,硬件解码必须要上面的俩个库,先做上面的库。
最后编译出来的文件,放在开发板上面即可。

解码效果图
测试命令 需要一个MP4的视频,解码成功代码库没问题
export LD_PRELOAD=/lib/stupid_bear_lib/librockchip_mpp.so
//我采用的是debian系统
//我的版本不对 需要加这个 指定这个库 直接使用系统工具链的库就会报错
//大家一定要注意这个问题
///mnt/stupid_bear_lib_All/bin/ffmpeg 这个是 ffmpeg 的位置 手动指定位置
/mnt/stupid_bear_lib_All/bin/ffmpeg -vcodec h264_rkmpp -i ~/v1080.mp4 -an -c:v rawvideo -pix_fmt yuv420p ~/output_hw.yuv

下面我会将 所有编译出来的库和源文件放在网盘中,防止大家编译时出现版本问题。在编译过程中肯定不会这么简单,还会出现很多问题,笔者遇见的问题太多了,无法一 一说,所以不想尝试编译库的话,就直接拿我的,交叉编译工具链是官方所提供的。
如果提供的库出现问题 大家可以联系我。
地址:通过网盘分享的文件:泰山派ffmpeg 编译库.zip
链接: https://pan.baidu.com/s/1VEtUiDV8zoiDP0SOkPDpww 提取码: 78xa
1755

被折叠的 条评论
为什么被折叠?



