Настройка и сборка OpenCV для установки пользовательского FFMPEG



Похоже, я не могу настроить OpenCV для связи с набором библиотек FFMPEG, отличным от/usr/lib.



Мой LD_LIBRARY_PATH содержит прямую ссылку на папку для пользовательской установки FFMPEG:



LD_LIBRARY_PATH=/pathto/ffmpeg-0.10.2/lib



Кроме того, я настроил pkgconfig следующим образом:



PKG_CONFIG_PATH=/samepathto/ffmpeg-0.10.2/lib/pkgconfig/



Однако в CMake я не могу найти никакой настройки для пути к FFMPEG-ни в basic, ни в custom. Единственным параметром, связанным с FFMPEG, является WITH_FFMPEG type setting (set to ON).



Я могу строить OpenCV, но он, похоже, связан с системными библиотеками для libavcodec - это вызывает конфликт, поскольку системные библиотеки являются версиями .52 и версия в моей установке FFMPEG есть .53. Связывание приложения на машине без одинаковых системных библиотек, похоже, не связано с моей пользовательской установкой OpenCV (в частности, libavcodec) из-за этого (я устанавливаю эти библиотеки в общую сетевую папку).



Я не уверен, что моя проблема заключается в создании и связывании с неправильной версией FFMPEG или если это что-то с моей средой после сборки (а затем связывание с неправильным ffmpeg).



Я строю на Linux, Redhat 6, OpenCV 2.3.1.

831   2  

2 ответов:

Что-то вроде

export LD_LIBRARY_PATH=/ffmpeg_install_path/lib/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/ffmpeg_install_path/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/ffmpeg_install_path/lib/

Должно сработать. По крайней мере, это работает для OpenCV 2.4.x на моем Ubuntu.

Для OpenCV 3.x и ffmpeg 3.x, я должен применить следующий патч

diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake
index 13b62ac..bab9df3 100644
--- a/cmake/OpenCVFindLibsVideo.cmake
+++ b/cmake/OpenCVFindLibsVideo.cmake
@@ -228,6 +228,12 @@ if(WITH_FFMPEG)
     if(FFMPEG_libavresample_FOUND)
       ocv_append_build_options(FFMPEG FFMPEG_libavresample)
     endif()
+   CHECK_MODULE(libavcodec HAVE_FFMPEG)
+   CHECK_MODULE(libavformat HAVE_FFMPEG)
+   CHECK_MODULE(libavutil HAVE_FFMPEG)
+   CHECK_MODULE(libswscale HAVE_FFMPEG)
+   CHECK_MODULE(libswresample HAVE_FFMPEG)
+   CHECK_MODULE(libavresample HAVE_FFMPEG)
     if(HAVE_FFMPEG)
       try_compile(__VALID_FFMPEG
           "${OpenCV_BINARY_DIR}"

И с помощью следующего скрипта построить

#!/bin/bash

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/Applications/ffmpeg/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/Applications/ffmpeg/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$HOME/Applications/ffmpeg/lib

cmake \
    -D BUILD_EXAMPLES=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_EXTRA_EXE_LINKER_FLAGS="-Wl,-rpath,$HOME/Applications/ffmpeg/lib" \
    -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=$HOME/Applications/opencv \
    /path/to/opencv

Кроме того, при сборке ffmpeg я должен включить флаги --enable-avresample.

Comments

    Ничего не найдено.