video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2023-12-26 18a05d269516a5e33d8460291c2f93e73d95adce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
cmake_minimum_required(VERSION 3.3)
 
set(BIN cffmpeg)
 
project(${BIN})
 
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release")
endif()
 
option(GB28181 "help string describing GB28181" ON)
option(ARM "help string describing ARM" OFF)
 
if (GB28181)
    set(EXTRA_FLAGS -DGB28181)
else()
    set(EXTRA_FLAGS)
endif()
 
set(CMAKE_CXX_FLAGS "-DLIB_CFFMPEG ${EXTRA_FLAGS} -fPIC -Wl,-Bsymbolic ${CMAKE_CXX_FLAGS}")
set(CMAKE_C_FLAGS "-DLIB_CFFMPEG ${EXTRA_FLAGS} -fPIC -Wl,-Bsymbolic ${CMAKE_C_FLAGS}")
 
set(CMAKE_CXX_FLAGS_DEBUG "-w -g -O0 -std=c++11 ${CMAKE_CXX_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-w -g -O0 ${CMAKE_C_FLAGS}")
 
set(CMAKE_CXX_FLAGS_RELEASE "-w -g -O2 -std=c++11 ${CMAKE_CXX_FLAGS}")
set(CMAKE_C_FLAGS_RELEASE "-w -g -O2 ${CMAKE_C_FLAGS}")
 
include_directories(    
    ${CMAKE_SOURCE_DIR} 
    ${CMAKE_SOURCE_DIR}/csrc/thirdparty 
    ${CMAKE_SOURCE_DIR}/csrc/thirdparty/whereami
    ${CMAKE_SOURCE_DIR}/csrc/thirdparty/ffmpeg/include
    ${CMAKE_SOURCE_DIR}/csrc/thirdparty/gb28181/include
)
 
if (GB28181)
    link_directories(${CMAKE_SOURCE_DIR}/csrc/thirdparty/gb28181/lib)
    set(LIBGB rtspclient StreamParse)
else()
    set(LIBGB)
endif()
 
if (ARM)
    set(FFMPEG_PATH ${CMAKE_SOURCE_DIR}/csrc/thirdparty/arm-ffmpeg/lib)
else()
    set(FFMPEG_PATH ${CMAKE_SOURCE_DIR}/csrc/thirdparty/ffmpeg/lib)
endif()
 
set(CMAKE_LIBRARY_PATH ${FFMPEG_PATH} ${CMAKE_LIBRARY_PATH})
    find_library(avutil NAMES libavutil.a )
    find_library(avformat NAMES libavformat.a )
    find_library(avcodec NAMES libavcodec.a )
    find_library(avfilter NAMES libavfilter.a)
    find_library(swscale NAMES libswscale.a)
    find_library(265 NAMES libx265.a)
    find_library(264 NAMES libx264.a)
 
if(ARM)
    find_library(aom NAMES libaom.a)
    find_library(avdevice NAMES libavdevice.a)
    find_library(ogg NAMES libogg.a)
    find_library(fdkaac NAMES libfdk-aac.a)
    find_library(postproc NAMES libpostproc.a)
    find_library(swresample NAMES libswresample.a)
    find_library(theora NAMES libtheora.a)
    find_library(theoradec NAMES libtheoradec.a)
    find_library(theoraenc NAMES libtheoraenc.a)
    find_library(vidstab NAMES libvidstab.a)
    find_library(vorbis NAMES libvorbis.a)
    find_library(vorbisenc NAMES libvorbisenc.a)
    find_library(vorbisfile NAMES libvorbisfile.a)
    find_library(vpx NAMES libvpx.a)
    find_library(xvidcore NAMES libxvidcore.a)
    find_library(mp3 NAMES libmp3lame.a)
endif()
 
set(LINK_LIB 
   ${avformat} 
   ${avcodec} 
   ${avfilter} 
   ${swscale} 
   ${avutil} 
   ${265} 
   ${264} 
   )
if(ARM)
    list(APPEND LINK_LIB
   ${aom}
   ${avdevice}
   ${ogg}
   ${fdkaac}
   ${mp3}
   ${postproc}
   ${swresample}
   ${theora}
   ${theoradec}
   ${theoraenc}
   ${vidstab}
   ${vorbis}
   ${vorbisenc}
   ${vorbisfile}
   ${vpx}
   ${xvidcore}
   )
endif()
 
file(GLOB_RECURSE FFMPEG_LIST ${CMAKE_SOURCE_DIR}/csrc/*.cpp)
list(APPEND FFMPEG_LIST ${CMAKE_SOURCE_DIR}/csrc/thirdparty/whereami/whereami.c)
 
add_library(${BIN} SHARED ${FFMPEG_LIST})
 
target_link_libraries(${BIN} ${LINK_LIB} ${LIBGB} pthread dl)