RV1126编译opencv+ffmpeg+x264

设置交叉编译环境

首先,确保您的系统已经配置了RV1126的交叉编译工具链。

X264编译

编译安装x264

使用git下载x264相关文件(也可以下载压缩包)。

编写x264编译安装脚本build_x264.sh。

#!/bin/bash

# 设置工具链路径
TOOLCHAIN_PATH=/path/to/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
GCC_COMPILER=${TOOLCHAIN_PATH}/bin/arm-linux-gnueabihf

# 设置x264安装路径
X264_INSTALL_DIR=/path/to/rv1126-YoloV5-Deepsort-master/3rdparty/x264



# 配置交叉编译选项,直接指定 C 和 C++ 编译器
./configure --prefix=${X264_INSTALL_DIR} \
            --cross-prefix=${GCC_COMPILER}- \
            --cc=${GCC_COMPILER}-gcc \
            --cxx=${GCC_COMPILER}-g++ \
            --host=arm-linux \
            --enable-cross-compile \
            --enable-shared \
            --disable-static \
            --enable-pic \
            --extra-cflags="-g -I${TOOLCHAIN_PATH}/include" \
            --extra-ldflags="-L${TOOLCHAIN_PATH}/lib"


# 编译并安装x264
make -j$(nproc)
make install


验证x264架构

由于最后的开发板是RV1126,arm架构,最好需要在编译安装完成之后,验证x264的架构。


cd /path/to/x264/lib(x264保存目录)

#验证得到的x264架构
file libx264.so.164 

得到arm架构的信息 。

ffmpeg编译

下载ffmpeg

由于后续编译安装的是opencv-4.5.3,为了使ffmpeg 和opencv版本匹配,选择ffmpeg-4.1.3进行交叉编译安装。

# 下载FFmpeg源码
FFMPEG_VERSION=4.1.3
wget https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2
tar -xjf ffmpeg-${FFMPEG_VERSION}.tar.bz2
cd ffmpeg-${FFMPEG_VERSION}

 编译安装ffmpeg

 下载好了ffmpeg 之后可以运行下面的脚本,编译ffmpeg并且链接到之前编译好的X264.

#!/bin/bash

# 设置工具链路径
TOOLCHAIN_PATH=/path/to/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
GCC_COMPILER=${TOOLCHAIN_PATH}/bin/arm-linux-gnueabihf
X264_INSTALL_DIR=/work/zgmcode/rv1126-YoloV5-Deepsort-master/3rdparty/x264
# 设置FFmpeg安装路径
FFMPEG_INSTALL_DIR=/path/to/ffmpeg


# 配置交叉编译选项,直接指定 C 和 C++ 编译器
./configure --prefix=${FFMPEG_INSTALL_DIR} \
            --cc=${GCC_COMPILER}-gcc \
            --cxx=${GCC_COMPILER}-g++ \
            --target-os=linux \
            --arch=arm \
            --enable-cross-compile \
            --enable-shared \
            --disable-static \
            --disable-debug \
            --disable-doc \
            --enable-gpl \
            --enable-libx264 \
            --enable-pic \
            --extra-cflags="-I${X264_INSTALL_DIR}/include -I${TOOLCHAIN_PATH}/include" \
            --extra-ldflags="-L${X264_INSTALL_DIR}/lib -L${TOOLCHAIN_PATH}/lib" \
            --strip=${GCC_COMPILER}-strip

# 编译并安装FFmpeg
make -j$(nproc)
make install

# 清理
cd ..
rm -rf ffmpeg-${FFMPEG_VERSION}
rm ffmpeg-${FFMPEG_VERSION}.tar.bz2

echo "FFmpeg has been installed in ${FFMPEG_INSTALL_DIR}"

验证ffmpeg架构

 进入到ffmpeg安装目录,同样采用file命令去验证ffmpeg的架构。同样需要输出arm架构。


cd /path/to/ffmpeg/lib(ffmpeg保存目录)

#验证得到的ffmpeg架构
file libavcodec.so.58.35.100

opencv编译

opencv下载

可以去官网下载(或者采用git方法)opencv-4.5.3版本。

opencv_contrib下载

采用git方式下载opencv_contrib,后续需要进行一个版本验证。

#下载opencv_contrib
git clone https://github.com/opencv/opencv_contrib.git

#验证opencv_contrib对应的版本
git checkout 4.5.3

解决ffmpeg始终为NO的问题

问题根源

在编译opencv的时候,使用脚本命令开启-DWITH_FFMPEG=ON,但是实际上会出现ffmpeg为NO的问题,导致opencv 无法链接到ffmpeg。

主要的原因是在opencv中的CMake文件中对于ffmpeg开启需要通过自带的ffmpeg测试文件,使得HAVE_FFMPEG为YES。

解决方法

注释测试部分
# 进入到对应测试部分目录
cd opencv-4.5.3/modules/videoio/cmake/detect_ffmpeg.cmake

#找到对应测试部分
# if(HAVE_FFMPEG AND NOT HAVE_FFMPEG_WRAPPER AND NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
#   try_compile(__VALID_FFMPEG
#       "${OpenCV_BINARY_DIR}"
#       "${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
#       CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
#                   "-DLINK_LIBRARIES:STRING=${FFMPEG_LIBRARIES}"
#       OUTPUT_VARIABLE TRY_OUT
#   )
#   if(NOT __VALID_FFMPEG)
#     # message(FATAL_ERROR "FFMPEG: test check build log:\n${TRY_OUT}")
#     message(STATUS "WARNING: Can't build ffmpeg test code")
#     set(HAVE_FFMPEG FALSE)
#   endif()
# endif()


#直接注释就好了
手动添加ffmpeg 和x264链接

 到opencv中的cmake 文件中手动添加ffmpeg和x264链接

link_directories("/path/to/ffmpeg/lib/")
link_directories("/path/to/x264/lib/")

 

编译安装opencv

#!/bin/bash

set -e

# 设置工具链路径
export TOOLCHAIN_PATH=/path/to/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
export GCC_COMPILER=${TOOLCHAIN_PATH}/bin/arm-linux-gnueabihf


# 清理并创建构建目录
rm -rf build
mkdir build
cd build
# 备份原始路径
export ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export ORIGINAL_PATH=$PATH

# 临时移除Anaconda路径
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ':' '\n' | grep -v 'anaconda' | tr '\n' ':' | sed 's/:$//')
export PATH=$(echo $PATH | tr ':' '\n' | grep -v 'anaconda' | tr '\n' ':' | sed 's/:$//')


export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/path/to/ffmpeg/lib/pkgconfig

# 配置交叉编译选项
cmake -DCMAKE_BUILD_TYPE=RELEASE \
      -DCMAKE_SYSTEM_NAME=Linux \
      -DCMAKE_SYSTEM_PROCESSOR=arm \
      -DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \
      -DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++ \
      -DCMAKE_FIND_ROOT_PATH=${TOOLCHAIN_PATH} \
      -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
      -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
      -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
      -DBUILD_SHARED_LIBS=ON \
      -DWITH_FFMPEG=ON \
      -DFFMPEG_INCLUDE_DIRS=/path/to/ffmpeg/include \
      -DWITH_1394=OFF \
      -DWITH_GTK=OFF \
      -DWITH_FREETYPE=OFF \
      -DWITH_HARFBUZZ=OFF \
      -DBUILD_opencv_freetype=OFF \
      -DBUILD_opencv_highgui=OFF \
      -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
      -DCMAKE_INSTALL_PREFIX=/work/zgmcode/rv1126-YoloV5-Deepsort-master/3rdparty/opencv \
      ../

# 检查是否生成了Makefile
if [ ! -f "Makefile" ]; then
  echo "CMake configuration failed. Makefile not found."
  exit 1
fi

# 构建和安装
make -j$(nproc) 2>&1 | tee make_output.log
if [ $? -ne 0 ]; then
  echo "Make failed. Check make_output.log for details."
  exit 1
fi

make install 2>&1 | tee make_install_output.log
if [ $? -ne 0 ]; then
  echo "Make install failed. Check make_install_output.log for details."
  exit 1
fi

# echo "OpenCV has been successfully built and installed with FFmpeg and x264 support."
# 还原LD_LIBRARY_PATH和PATH
export LD_LIBRARY_PATH=$ORIGINAL_LD_LIBRARY_PATH
export PATH=$ORIGINAL_PATH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值