栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

海思(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目录下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号