安装交叉编译链,并配置环境变量验证—教程很多
配置上环境变量后,可查看编译命令
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目录下



