linux下x264 ffmpeg opencv的聯合編譯

點擊打開鏈接

opencv中做h264編碼向下調用ffmpeg,而ffmpeg中又調用libx264,於是這也就涉及到了libx264,ffmpeg和opencv三者之間的聯合編譯

如果沒有rtsp流的抓取,直接安裝opencv即可,注意make是增加-pthread 和-lc(libpthread libc)如果需要抓取rtsp

1、安裝x.264 否則抓取失敗,不支持x.264

1).安裝依賴的包:

sudo apt-get update

sudo apt-get installbuild-essential Git-core checkinstall texi2html libfaac-dev  libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libx11-devlibxfixes-dev zlib1g-dev

 

2).安裝Yasm:x264需要使用yasm來針對CPU架構進行優化,提高性能。(不需要,我們是爲了嵌入式,yasm僅針對x86 x64)

3).安裝x264:下載源代碼、編譯、安裝

x264下載:http://download.videolan.org/x264/snapshots/

cd x264

./configure --enable-static   //靜態庫

make

make install

4).此時 libx264.a默認安裝在/usr/local/lib,直接編譯會出現

2、安裝ffmpeg 否則沒有實現,抓取失敗

https://www.ffmpeg.org/download.html

注意下載對應的版本,否則和opencv會不一致,用的是 1.2版本(原來下載最新版,頭文件定義不一致)

./configure --disable-asm --disable-shared--enable-static

3、用cmake-gui編譯opencv2.4.9

注意要 with ffmpeg  without 1394

4.編譯程序,修改makefile,主要是makefile裏面庫的路徑,以及順序。

CC=g++

 MAKE=make

CFLAGS= -Wall -D_REENTRANT-g -Wl,--no-export-dynamic

INCDIR=-I./include-I./include/lib -I/home/fyp/opencv-2.4.9/include

LIBDIR=-L/usr/local/lib-L/usr/local/share/OpenCV/3rdparty/lib -L/usr/lib/x86_64-linux-gnu-L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/x86_64-linux-gnu/oxide-qt

LIBFLAG=-Wl,-Bstatic-lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_world-Wl,--start-group -lzlib -llibjpeg -llibtiff -llibjasper -llibpng -lavformat -lavcodec -lavdevice -lavfilter -lavutil-lswscale -Wl,--end-group

LIBFLAG+=-Wl,-Bdynamic-Wl,--start-group -pthread -lrt -lc -Wl,--end-group

OBJECTS=TestDetectWaterDepthDLL.o

COMMHEAD=./include/DWDDefine.h./include/GetConfig.h ./include/WinToLinux.h

TARGET=DetectWaterDepth

ARR=/home/fyp/opencv-2.4.9/release/lib/libopencv_highgui.a /home/fyp/opencv2.4.9/release/lib/libopencv_imgproc.a  /home/fyp/opencv2.4.9/release/lib/libopencv_core.a /usr/local/share/OpenCV/3rdparty/lib/liblibjpeg.a /usr/local/share/OpenCV/3rdparty/lib/liblibtiff.a /home/fyp/opencv-2.4.9/release/3rdparty/lib/liblibjasper.a /usr/local/share/OpenCV/3rdparty/lib/liblibpng.a /usr/local/ffmpeg/lib/libswscale.a /usr/local/ffmpeg/lib/libavformat.a/usr/local/ffmpeg/lib/libavfilter.a /usr/local/ffmpeg/lib/libavdevice.a/usr/local/ffmpeg/lib/libavcodec.a /usr/local/ffmpeg/lib/libavutil.a/home/fyp/x264/libx264.a /usr/local/share/OpenCV/3rdparty/lib/libzlib.a

all :$(TARGET) $(OBJECTS)

 DetectWaterDepth : $(OBJECTS) $(COMMHEAD) $(CC) $(CFLAGS)$(INCDIR) $(LIBDIR) $(LIBFLAG) -o $@ $(OBJECTS) $(ARR)

 TestDetectWaterDepthDLL.o : TestDetectWaterDepthDLL.cpp$(COMMHEAD)$(CC) $(CFLAGS) -c$(INCDIR) $(LIBDIR) $<

.PHONY: clean

clean:

      -rm -f *.o $(TARGET)

 

發佈了22 篇原創文章 · 獲贊 94 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章