RK3566添加ffpeg【Buildroot系统】

本文章使用立创·泰山派RK3566进行讲解!

本文章针对Buildroot系统进行演示,有很多人都发现了,使用Buildroot系统直接在菜单里面勾选ffmpeg是不可以直接使用的!

会报错!!

Not a video capture device. 

/dev/video0: No such device

接下来我们就来解决这个问题!!

出现上面的问题,原因也很简单,其实就是ffmpeg的版本类型不适合。

我们需要交叉编译瑞芯微版本的ffmpeg源码x264软件解码,转移到开发板即可!

一、烧录镜像

首先我们需要在开发板里面烧录一个Buildroot系统,这部分卖开发板的商家肯定资料很全!!

二、配置交叉编译环境

这里立创的教程已经很全面了,直接按照教程里面的进行配置即可!!【共建】移植Qt5

在终端输入以下代码,查看自己的交叉环境配置是否成功,并且记住交叉编译工具的绝对路径:

aarch64-linux-gnu-gcc -v

框起来的就是自己电脑的交叉编译器工具路径一定要记住!!后面要用!

三、交叉编译

1、下载x264源码

方法一【网址下载】:https://www.videolan.org/developers/x264.html

方法二【git拉取】(推荐

我们这里就使用git命令拉取源码:

git clone https://code.videolan.org/videolan/x264.git

【没有git的可以下载一个】

2、交叉编译x264

进入x264目录下:

cd x264/

创建一个x264build文件夹,用来存放编译安装后的文件:

mkdir x264build

创建一个autoConfig.sh脚本用来编译:

touch autoConfig.sh

编辑autoConfig.sh:

gedit autoConfig.sh

autoConfig.sh中编写以下内容:

注意:下面的TOOLCHAIN_DIR是上面配置交叉编译环境里面强调需要记住的路径

#!/bin/bash

# 定义变量
# 设置x264的安装位置
PREFIX="./x264build"

# 交叉编译器bin路径,使用aarch64-linux-gnu-gcc -v命令查看
TOOLCHAIN_DIR="/opt/gcc-aarch64-linux-gnu/bin"

# 工具链前缀,用于指定交叉编译工具的路径
TOOLCHAIN="$TOOLCHAIN_DIR/aarch64-linux-gnu-"

# 运行 configure 脚本
echo "正在配置 x264..."
./configure \
  --prefix=$PREFIX \
  --disable-asm \
  --enable-shared \
  --enable-static \
  --host=aarch64-linux-gnu \
  --cross-prefix=$TOOLCHAIN \
  --enable-pic

# 检查 configure 的返回状态
if [ $? -ne 0 ]; then
  echo "错误:配置 x264 失败。"
  exit 1
else
  echo "配置成功。"
fi

# 编译 x264
echo "正在编译 x264..."
# 使用 nproc 获取处理器核心数,以确定并行编译的进程数
make -j$(nproc)

# 检查编译的返回状态
if [ $? -ne 0 ]; then
  echo "错误:编译 x264 失败。"
  exit 1
else
  echo "编译成功。"
fi

# 安装 x264
echo "正在安装 x264..."
make install

# 检查安装的返回状态
if [ $? -ne 0 ]; then
  echo "错误:安装 x264 失败。"
  exit 1
else
  echo "安装成功。"
fi

# 清理构建目录
echo "正在清理..."
make clean

# 检查清理的返回状态
if [ $? -ne 0 ]; then
  echo "警告:清理构建目录失败。"
else
  echo "构建过程完成。"
fi

# 脚本正常退出
exit 0

点击保存:

然后关闭文件。

autoConfig.sh运行权限:

chmod +x autoConfig.sh

运行autoConfig.sh脚本:

./autoConfig.sh

下面这样就是成功了:

我们还可以在x264/x264build文件夹中找到相关的文件夹:

我们在x264build目录下获取安装目录的绝对路径:

pwd

记住这个路径,我们后面编译ffmpeg的时候要用!!!

注意:这是我的路径,每个人的路径都有所不同,一定要输入pwd查看!!!

3、下载瑞芯微版本ffmpeg源码

返回到x264的上层目录:

cd ..

然后使用git命令拉取瑞芯微ffmpeg源码:

git clone https://gitclone.com/github.com/nyanmisaka/ffmpeg-rockchip.git

4、交叉编译ffmpeg

进入ffmpeg-rockchip目录下:

cd ffmpeg-rockchip

新建一个ffmpeg_rk_build文件夹用来存放安装的文件和文件夹:

mkdir ffmpeg_rk_build

创建一个autoConfig.sh脚本:

touch autoConfig.sh

编辑autoConfig.sh脚本:

gedit autoConfig.sh

autoConfig.sh脚本中编写如下内容:

X264_BUILD_DIR 的路径在前面 交叉编译X264 已经使用 pwd 查看过了,直接复制粘贴就行,一定要更改!!一定要更改!!一定要更改!!每个人的路径都不太一样!!!

# 定义前缀目录
PREFIX="./ffmpeg_rk_build"

# x264安装目录的绝对路径
X264_BUILD_DIR="/home/lipeng/share/TaiShanPai/x264/x264build"

# x264安装目录中include目录绝对路径 
X264_INCLUDE_DIR="$X264_BUILD_DIR/include"
# x264安装目录中lib目录绝对路径
X264_LIB_DIR="$X264_BUILD_DIR/lib"

# 设置 PKG_CONFIG_PATH 环境变量
export PKG_CONFIG_PATH=$X264_LIB_DIR/pkgconfig:$PKG_CONFIG_PATH

echo "配置环境变量:"
echo "export PKG_CONFIG_PATH=$X264_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 \
        --extra-cflags=-I$X264_INCLUDE_DIR \
        --extra-ldflags=-L$X264_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

然后点击保存:

autoConfig.sh脚本添加运行权限:

chmod +x autoConfig.sh

然后运行autoConfig.sh脚本:

./autoConfig.sh

出现下面的情况就算成功:

我们进入ffmpeg_rk_build目录下,可以看到相关的文件夹:

cd ./ffmpeg_rk_build/

四、将x264和ffmpeg转移到开发板

我们接下来无论使用转移工具都可以,只要能把相关的文件转移到开发板!!

我使用的是U盘转移。

1、转移x264

/x264/x264build/bin 文件夹中的所有内容全部复制到开发板的 /usr/bin/ 目录下

/x264/x264build/lib 文件夹中的所有内容全部复制到开发板的 /usr/lib/ 目录下

2、转移ffmpeg

/ffmpeg-rockchip/ffmpeg_rk_build/bin 文件夹中的所有内容全部复制到开发板的 /usr/bin/ 目录下

/ffmpeg-rockchip/ffmpeg_rk_build/lib 文件夹中的所有内容全部复制到开发板的 /usr/lib/ 目录下

五、测试

在开发板查看x264:

x264 --help

查看ffmepg:

ffmpeg -version

尝试录制视频:

软件解码性能不太够,所以做了性能的格式的限制。

这里定时录制一个5秒的视频!

ffmpeg -f v4l2 -i /dev/video0 -vf scale=960:540 -c:v libx264 -preset ultrafast -tune zerolatency -crf 30 -b:v 50k -r 15 -t 5 output.mp4
  1. -f v4l2:这个选项告诉ffmpeg输入流的格式。v4l2指的是Video for Linux 2,它是Linux下视频设备的驱动程序接口。这表示ffmpeg将以v4l2格式读取视频流。

  2. -i /dev/video0:这是输入文件或设备的指定。在本例中,/dev/video0是一个指向视频设备的文件名,通常是连接到系统的USB摄像头或板载摄像头。

  3. -vf scale=960:540:这表示视频过滤器(vf代表video filter)。scale过滤器用于改变视频的尺寸。这里的960:540是指输出视频的宽度和高度,将视频缩放到960x540像素。

  4. -c:v libx264:这指定了视频编码器。c:vcodec:video的简写,libx264是一个高质量的H.264视频编码库。这表示视频流将使用libx264进行编码。

  5. -preset ultrafast:这设置了编码预设。ultrafast预设用于尽可能快的编码,牺牲了一定的压缩效率。这对于实时应用或资源有限的设备是非常有用的。

  6. -tune zerolatency:这个选项用于调优编码器,使其更适合低延迟的应用。这通常会进一步牺牲压缩效率以提高响应速度。

  7. -crf 30crf代表恒定速率因子,是libx264特有的一个选项,用于在视频质量和文件大小之间做平衡。数值越低,视频质量越好,文件也越大。30是一个相对较高的值,意味着视频质量会被牺牲以减少文件大小和编码时间。

  8. -b:v 50k:这设置了视频比特率。50k是指视频编码的最大平均比特率为50千比特每秒。较低的比特率可以减少文件大小,但通常会导致视频质量下降。

  9. -r 15:这设置了视频帧率。15意味着视频将被编码为每秒15帧。降低帧率可以减少CPU负担和文件大小。

  10. -t 5:这设置了视频的持续时间。5意味着视频将被编码为5秒的长度。这对于测试和调试非常有用,因为它可以防止无限期的编码。

  11. output.mp4:这是输出文件名。ffmpeg将把编码后的视频保存到名为output.mp4的MP4文件中。

我们就可以在windows电脑上面播放output.mp4这个视频文件。

如果你已经为开发板连接上了屏幕(我这里连接了HDMI)屏幕,可以直接运行下面的命令再屏幕上面播放这个MP4视频文件:

gst-launch-1.0 filesrc location=output.mp4 ! decodebin ! autovideosink

注意事项

本文章只使用了Buildroot测试,对于Ubuntu和Debian系统,除了转移到开发板的步骤不一致,交叉编译的步骤应该都是一样的,各位读者可以尝试举一反三。

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheFiles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值