瑞芯微泰山派FFMPEG硬解码

在网上捣鼓了半天,资料很少,官网给的是软件解码编码的方法,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值