海思(himixx200)交叉编译H264,ffmpeg和opencv4.2

安装交叉编译链,并配置环境变量验证—教程很多
配置上环境变量后,可查看编译命令

zycxvm00x@Ubuntu16-040:~$ arm
arm2hpdl                       arm-himix200-linux-gcov
arm-himix200-linux-addr2line   arm-himix200-linux-gcov-tool
arm-himix200-linux-ar          arm-himix200-linux-gdb
arm-himix200-linux-as          arm-himix200-linux-gprof
arm-himix200-linux-c++         arm-himix200-linux-ld
arm-himix200-linux-c++filt     arm-himix200-linux-ld.bfd
arm-himix200-linux-cpp         arm-himix200-linux-nm
arm-himix200-linux-elfedit     arm-himix200-linux-objcopy
arm-himix200-linux-g++         arm-himix200-linux-objdump
arm-himix200-linux-gcc         arm-himix200-linux-ranlib
arm-himix200-linux-gcc-6.3.0   arm-himix200-linux-readelf
arm-himix200-linux-gcc-ar      arm-himix200-linux-size
arm-himix200-linux-gcc-nm      arm-himix200-linux-strings
arm-himix200-linux-gcc-ranlib  arm-himix200-linux-strip

在Linux 平台做FFMPEG视频编码的程序时,需要安装解码库。以H264编解码为例,我们需要先安装X264库:
(1)下载X264 : Git clone https://code.videolan.org/videolan/x264.git
(2)安装X264: cd /x264

        CC=arm-himix200-linux-gcc ./configure \
--host=arm-himix200-linux \
--prefix=/opt/ffmpeg-hisi/x264_hisi \
--cross-prefix=arm-himix200-linux- \
--enable-static \
--enable-shared \
--disable-asm

(3) make && make install
找不到arm-himix200的编译链,需要下载32位的库
sudo apt install lib32z1-dev
install的时候需要进入到root权限下进行instal,并且在root下配置环境变量

su root  

export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH

make install
(4) export LD_LIBRARY_PATH=/opt/ffmpeg-hisi/x264_hisi/lib:$LD_LIBRARY_PATH
(5) export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/ffmpeg-hisi/x264_hisi/lib/pkgconfig
(6) export PATH=/opt/ffmpeg-hisi/x264_hisi//bin:$PATH
(7) 验证安装:cd /opt/ffmpeg-hisi/x264_hisi 查看是否是bin lib include等文件夹
2. 安装ffmpeg-3.4.9 cd ffmpeg-3.4.9

./configure \
        --prefix=/opt/ffmpeg-hisi/ffmpeg_hisi/ \
       --enable-avresample \
        --enable-cross-compile \
        --cross-prefix=arm-himix200-linux- \
        --arch=arm \
        --target-os=linux \
        --enable-gpl \
        --enable-shared \
        --enable-static \
        --enable-libx264 \
        --extra-cflags=-I/opt/ffmpeg-hisi/x264_hisi/include \
        --extra-ldflags=-L/opt/ffmpeg-hisi/x264_hisi/lib

make -j8 && make install
验证安装:cd /opt/ffmpeg-hisi/ffmpeg_hisi 查看是否是bin lib include等文件夹

export LD_LIBRARY_PATH=/opt/ffmpeg-hisi/ffmpeg_hisi/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/ffmpeg-hisi/ffmpeg_hisi/lib/pkgconfig
export PATH=/opt/ffmpeg-hisi/ffmpeg_hisi/bin:$PATH

安装opencv-4.2.0 opencv_contrib-4.2.0
将这个两个解压放到同级目录 mkdir build && cd build
执行 OPENCV_EXTRA_MODULES_PATH:路径换成自己的
修改cmakelist.txt:560行添加ocv_include_directories(./3rdparty/zlib)
最好把try_complie验证的错误打印打开就是 message(FATAL_ERROR “FFMPEG: test check build log:\n${TRY_OUT}”)这句话。
在opencv-4.2.0/modules/videoio/cmake,需要修改detect_ffmpeg.cmake
test.cpp错误验证也在这里
find ffmpeg

   set(HAVE_FFMPEG TRUE)  
    set(FFMPEG_DIR /opt/ffmpeg-hisi/ffmpeg_hisi)  
    set(FFMPEG_INCLUDE_DIRS ${FFMPEG_DIR}/include)  
    set(FFMPEG_LIBRARY_DIRS ${FFMPEG_DIR}/lib)  
    set(FFMPEG_LIBRARIES avcodec avformat avutil swscale x264  avresample avdevice avfilter postproc swresample)  
    message(STATUS "FFMPEG_INCLUDE_DIR: ${FFMPEG_INCLUDE_DIRS}")  
    message(STATUS "FFMPEG_LIBRARY_DIRS: ${FFMPEG_LIBRARY_DIRS}")  
    message(STATUS "FFMPEG_LIBRARIES: ${FFMPEG_LIBRARIES}") 

如果出现找不到ffmpeg的动态库,
需要在编译test.cpp的后面加上
“-DLINK_DIRECTORIES:STRING=${FFMPEG_LIBRARY_DIRS}”
例如,在这里修改

#==================================

if(HAVE_FFMPEG AND NOT HAVE_FFMPEG_WRAPPER AND NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
    set(HAVE_FFMPEG TRUE)  
    set(FFMPEG_DIR /opt/ffmpeg-hisi/ffmpeg_hisi)  
    set(FFMPEG_INCLUDE_DIRS ${FFMPEG_DIR}/include)  
    set(FFMPEG_LIBRARY_DIRS ${FFMPEG_DIR}/lib)  
    set(FFMPEG_LIBRARIES avcodec avformat avutil swscale x264  avresample avdevice avfilter postproc swresample)
    message("detec_ffmpeg.cmake-----xxxxxxxxxxxxxx--") 
  message(STATUS "WITH_FFMPEG: ${WITH_FFMPEG}") 
    message(STATUS "HAVE_FFMPEG: ${HAVE_FFMPEG}") 
   message(STATUS "FFMPEG_INCLUDE_DIR: ${FFMPEG_INCLUDE_DIRS}")  
    message(STATUS "FFMPEG_LIBRARY_DIRS: ${FFMPEG_LIBRARY_DIRS}")  
    message(STATUS "FFMPEG_LIBRARIES: ${FFMPEG_LIBRARIES}") 
  try_compile(__VALID_FFMPEG
      "${OpenCV_BINARY_DIR}"
      "${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
      CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
		  "-DLINK_DIRECTORIES:STRING=${FFMPEG_LIBRARY_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()

#==================================

如果cmake验证ffmpeg的test.cpp还是出现错误,需要把x264拷贝ffmpeg目录下
然后重新执行cmake指令

cmake -DOPENCV_EXTRA_MODULES_PATH=/home/zycxvm00x/cross_file/opencv-4.2.0/opencv_contrib-4.2.0/modules  \
        -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.2.0/ \
       -D with-contrib=ON \
       -DCMAKE_BUILD_TYPE=Release \
       -D WITH_MATLAB=OFF \
       -D WITH_CUDA=OFF \
       -D BUILD_DOCS=OFF \
       -D BUILD_PERF_TESTS=OFF \
       -D BUILD_TESTS=OFF \
       -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF \
       -D HAVE_FFMPEG=ON \
       -D WITH_FFMPEG=ON \
        -D CMAKE_TOOLCHAIN_FILE=../himix200.toolchain.cmake \
       -DBUILD_opencv_xfeatures2d=OFF  -DWITH_PROTOBUF=OFF \
       -D FFMPEG_INCLUDE_DIR=/opt/ffmpeg-hisi/ffmpeg_hisi/include \
       -D FFMPEG_LIB_DIR="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
       -D FFMPEG_CODEC_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
       -D FFMPEG_FORMAT_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
       -D FFMPEG_RESAMPLE_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
       -D FFMPEG_SWSCALE_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
       -D FFMPEG_UTIL_LIB="/opt/ffmpeg-hisi/ffmpeg_hisi/lib" \
	  .. 

himix200.toolchain.cmake就是指定的交叉编译链,可自行修改
make -j8

如果出现libopencvcore.so生成失败,需要在编译目录下找到CMakeCache.txt,修改BUILD_ZLIB:BOOL=ON,这是为了用32位编译链去生成lib库

make install

最后如果opencv make -j8安装出错,出现未定义的引用,找不到ffmpeg相关的.so,需要把对应的X264以及ffmpeg相关的.so都拷贝到对应编译链的lib目录下

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值