使用cmake重写live555工程-附源码和视频教程
cmake-live555
工程總覽
從零開始手寫cmake工程管理live555開源代碼,新的工程已經開源到github上,代碼倉庫地址:
github倉庫地址
視頻教程地址: live555-cmake
歡迎fork和轉發
剪頭指向的為4個庫,每個庫里面建議一個CMakeLists.txt文件用于生成對應的庫,剩下的幾個文件夾除了WindowsAudioImputDevice沒有使用外(因為我是在linux上實現的),其他的都在主目錄下的CMakeLists.txt文件中添加可執行文件。
UsageEnvironment目錄中生命了一些虛類
BasicUsageEnvironment主要是對目錄UsageEnvironment中定義的虛類的實現
groupsock主要實現了對socket封裝,在liveMedia目錄中涉及網絡的部分會使用
liveMedia目錄是整個live555開發庫的核心部分
TODO:增加生成器表達式,后期 可以根據cmake選項生成是否含有符號信息的可執行程序
TODO:挨個分析live555源碼
使用方式
Clion導入已有工程
手動編譯
各個庫的創建
UsageEnvironment實現的CMakeLists.txt如下,實現將UsageEnvironment里的源文件編譯成對應的庫文件,這里生測還給你的庫文件是UsageEnvironment cmake會自動給庫添加上lib前綴,所以最終生成libUsageEnvironment.a
#This should be the first line of the CMakeLists.txt cmake_minimum_required(VERSION 3.2)# Poor practice, but very common project(live555 VERSION 4.7.2)file(GLOB USER_LIBS_FILE ./*.cpp)add_library(UsageEnvironment STATIC${USER_LIBS_FILE})add_definitions("-Wall -g") add_definitions("-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1") #add_compile_options(-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1)target_include_directories(UsageEnvironment PUBLIC .PUBLIC includePUBLIC ../groupsock/include)同樣實現了
BasicUsageEnvironment庫的建立
#This should be the first line of the CMakeLists.txt cmake_minimum_required(VERSION 3.2)# Poor practice, but very common project(live555 VERSION 4.7.2)file(GLOB USER_LIBS_FILE ./*.cpp)add_library(BasicUsageEnvironment STATIC${USER_LIBS_FILE})add_definitions("-Wall -g") add_definitions("-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1") #add_compile_options(-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1)target_include_directories(BasicUsageEnvironment PUBLIC .PUBLIC includePUBLIC ../UsageEnvironment/includePUBLIC ../groupsock/include)groupsock庫的簡歷
#This should be the first line of the CMakeLists.txt cmake_minimum_required(VERSION 3.2)# Poor practice, but very common project(live555 VERSION 4.7.2)file(GLOB USER_LIBS_FILE ./*.cpp) file(GLOB USER_LIBS_C_FILE ./*.c)add_library(groupsock STATIC${USER_LIBS_FILE}${USER_LIBS_C_FILE})add_definitions("-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1") #add_compile_options(-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1)target_include_directories(groupsock PUBLIC .PUBLIC includePUBLIC ./../../UsageEnvironment/include)liveMedia庫的建立
#This should be the first line of the CMakeLists.txt cmake_minimum_required(VERSION 3.2)# Poor practice, but very common project(live555 VERSION 4.7.2)file(GLOB USER_LIBS_FILE ./*.cpp) file(GLOB USER_LIBS_C_FILE ./*.c)add_library(liveMedia STATIC${USER_LIBS_FILE}${USER_LIBS_C_FILE})add_definitions("-Wall -g") add_definitions("-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1") #add_compile_options(-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1)target_link_libraries(liveMediaPUBLIC sslPUBLIC crypto) target_include_directories(liveMedia PUBLIC .PUBLIC includePUBLIC ../UsageEnvironment/includePUBLIC ../groupsock/include)以及在主目錄中創建個個可執行程序,以及live555MediaServer
#This should be the first line of the CMakeLists.txt cmake_minimum_required(VERSION 3.2)# Poor practice, but very common project(live555 VERSION 4.7.2)# add_subdirectory(liveMedia) add_subdirectory(groupsock) add_subdirectory(BasicUsageEnvironment) add_subdirectory(UsageEnvironment)file(GLOB USER_LIBS_FILE ./mediaServer/*.cpp) add_executable(live555MediaServer${USER_LIBS_FILE}) add_definitions("-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1") #add_compile_options(-std=c++11 -O -DSOCKLEN_T=socklen_t -g -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1)target_link_libraries(live555MediaServerPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment)target_include_directories(live555MediaServer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)# proxy live555 add_executable(live555ProxyServer proxyServer/live555ProxyServer.cpp) target_link_libraries(live555ProxyServerPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(live555ProxyServer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include) # hls live555 add_executable(live555HLSProxy hlsProxy/live555HLSProxy.cpp) target_link_libraries(live555HLSProxyPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(live555HLSProxy PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)# test programe add_executable(testMP3Streamer testProgs/testMP3Streamer.cpp) target_link_libraries(testMP3StreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMP3Streamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)# add_executable(testMPEG1or2VideoStreamer testProgs/testMPEG1or2VideoStreamer.cpp) target_link_libraries(testMPEG1or2VideoStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG1or2VideoStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG1or2AudioVideoStreamer testProgs/testMPEG1or2AudioVideoStreamer.cpp) target_link_libraries(testMPEG1or2AudioVideoStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG1or2AudioVideoStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG2TransportStreamer testProgs/testMPEG2TransportStreamer.cpp) target_link_libraries(testMPEG2TransportStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG2TransportStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include) ########################################################## add_executable(testH264VideoStreamer testProgs/testH264VideoStreamer.cpp) target_link_libraries(testH264VideoStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testH264VideoStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testH265VideoStreamer testProgs/testH265VideoStreamer.cpp) target_link_libraries(testH265VideoStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testH265VideoStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testDVVideoStreamer testProgs/testDVVideoStreamer.cpp) target_link_libraries(testDVVideoStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testDVVideoStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testWAVAudioStreamer testProgs/testWAVAudioStreamer.cpp) target_link_libraries(testWAVAudioStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment)target_include_directories(testWAVAudioStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testAMRAudioStreamer testProgs/testAMRAudioStreamer.cpp) target_link_libraries(testAMRAudioStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testAMRAudioStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMKVStreamer testProgs/testMKVStreamer.cpp) target_link_libraries(testMKVStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMKVStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testOggStreamer testProgs/testOggStreamer.cpp) target_link_libraries(testOggStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testOggStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(vobStreamer testProgs/vobStreamer.cpp) target_link_libraries(vobStreamerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(vobStreamer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMP3Receiver testProgs/testMP3Receiver.cpp) target_link_libraries(testMP3ReceiverPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMP3Receiver PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG2TransportReceiver testProgs/testMPEG2TransportReceiver.cpp) target_link_libraries(testMPEG2TransportReceiverPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG2TransportReceiver PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(sapWatch testProgs/sapWatch.cpp) target_link_libraries(sapWatchPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(sapWatch PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)################################## add_executable(testRelay testProgs/testRelay.cpp) target_link_libraries(testRelayPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testRelay PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include) add_executable(testReplicator testProgs/testReplicator.cpp) target_link_libraries(testReplicatorPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testReplicator PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testOnDemandRTSPServer testProgs/testOnDemandRTSPServer.cpp) target_link_libraries(testOnDemandRTSPServerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testOnDemandRTSPServer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testRTSPClient testProgs/testRTSPClient.cpp) target_link_libraries(testRTSPClientPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testRTSPClient PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(openRTSP testProgs/openRTSP.cpptestProgs/playCommon.cpp) target_link_libraries(openRTSPPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(openRTSP PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(playSIP testProgs/playSIP.cpptestProgs/playCommon.cpp) target_link_libraries(playSIPPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(playSIP PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testH264VideoToHLSSegments testProgs/testH264VideoToHLSSegments.cpp) target_link_libraries(testH264VideoToHLSSegmentsPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testH264VideoToHLSSegments PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG1or2Splitter testProgs/testMPEG1or2Splitter.cpp) target_link_libraries(testMPEG1or2SplitterPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG1or2Splitter PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG1or2ProgramToTransportStream testProgs/testMPEG1or2ProgramToTransportStream.cpp) target_link_libraries(testMPEG1or2ProgramToTransportStreamPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG1or2ProgramToTransportStream PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testH264VideoToTransportStream testProgs/testH264VideoToTransportStream.cpp) target_link_libraries(testH264VideoToTransportStreamPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testH264VideoToTransportStream PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testH265VideoToTransportStream testProgs/testH265VideoToTransportStream.cpp) target_link_libraries(testH265VideoToTransportStreamPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testH265VideoToTransportStream PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(MPEG2TransportStreamIndexer testProgs/MPEG2TransportStreamIndexer.cpp) target_link_libraries(MPEG2TransportStreamIndexerPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(MPEG2TransportStreamIndexer PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG2TransportStreamTrickPlay testProgs/testMPEG2TransportStreamTrickPlay.cpp) target_link_libraries(testMPEG2TransportStreamTrickPlayPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG2TransportStreamTrickPlay PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(registerRTSPStream testProgs/registerRTSPStream.cpp) target_link_libraries(registerRTSPStreamPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(registerRTSPStream PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMKVSplitter testProgs/testMKVSplitter.cpp) target_link_libraries(testMKVSplitterPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMKVSplitter PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(testMPEG2TransportStreamSplitter testProgs/testMPEG2TransportStreamSplitter.cpp) target_link_libraries(testMPEG2TransportStreamSplitterPUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(testMPEG2TransportStreamSplitter PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)add_executable(mikeyParse testProgs/mikeyParse.cpp) target_link_libraries(mikeyParsePUBLIC sslPUBLIC cryptoPRIVATE liveMediaPRIVATE groupsockPRIVATE BasicUsageEnvironmentPRIVATE UsageEnvironment) target_include_directories(mikeyParse PUBLIC .PUBLIC includePUBLIC UsageEnvironment/includePUBLIC groupsock/includePUBLIC liveMedia/includePUBLIC BasicUsageEnvironment/include)為了方便交流可以關注下,微信公眾號:
也可以通過csdn了解后期live555的分析過程
博客地址
總結
以上是生活随笔為你收集整理的使用cmake重写live555工程-附源码和视频教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 20上安装gdbgui
- 下一篇: 【软件工程】极限编程