opencv+h264+ffmpeg环境搭建:
由于笔记软件的限制,无法上传相应的软件包,请百度搜索。
先安装系统必要工具:
apt install cmake libtbb2 libtbb-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libjpeg-dev libpng-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libfaac-dev libmp3lame-dev yasm libpng16-16
1、编译nasm-2.14:
tar -jxvf nasm-2.14.tar.bz2
cd nasm-2.14
./configure --prefix=/usr
make
make install
2、编译x264:
tar -jxvf last_x264.tar.bz2
cd x264-snapshot-20191014-2245
./configure --enable-shared --prefix=/usr
make
make install
3、编译ffmpeg-3.4.6
tar zxvf ffmpeg-3.4.6.tar.gz
cd ffmpeg-3.4.6
./configure --prefix=/usr/local/ffmpeg/ --enable-shared --enable-gpl --enable-libx264
make
make install
4、编译opencv-3.4.7:
unzip opencv-3.4.7.zip
cd opencv-3.4.7
vi +47 3rdparty/ippicv/ippicv.cmake
修改ippicv_2019_lnx_intel64_general_20180723.tgz的路径
from:
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
to
"file:/usr/src/"
保存并退出,然后进入opencv-3.4.7目录
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_OPENGL=ON WITH_QT=ON ..
make
make install
然后把需要的库和头文件放到工程目录下对应的子目录,比如inc、lib等目录,工程的CMakeLists.txt文件内容大致如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(rtspServer)
set(CMAKE_CXX_STANDARD 11)
#set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread" )
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
#set(OpenCV_DIR /usr/local/opencv)
#FIND_PACKAGE( OpenCV REQUIRED )
set(SOURCE_FILES
src/main.cpp
src/x264_encoder.cpp
src/h264encoder.c
src/utils.c
src/stream_queue.c
src/rtsp_msg.c
src/rtsp_demo.c
src/rtp_enc.c
)
include_directories(inc)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
# Declare the target (an executable)
ADD_EXECUTABLE(rtspServer ${SOURCE_FILES})
#target_link_libraries(rtspServer ${OpenCV_LIBS})
TARGET_LINK_LIBRARIES(rtspServer -L. -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_shape -lopencv_videoio -lx264 -lpthread -lm -ldl -lrt)
#TARGET_LINK_LIBRARIES(rtspServer ${OpenCV_LIBS} -L. -lpthread -lm -ldl -lrt)
MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")