From 74d3a75bbbcc5ef6fd79cdb60aa979bc9486ed02 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Tue, 2 May 2017 23:43:10 +0800 Subject: [PATCH] add test for multi server --- CMakeLists.txt | 8 +++---- tests/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++ tests/test_server.cpp | 49 ++++++++++++++++++++++++------------------- tests/test_server.pem | 30 ++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 26 deletions(-) create mode 100644 tests/CMakeLists.txt create mode 100644 tests/test_server.pem diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a5a0318..10840fae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(ZLMediaKit) cmake_minimum_required(VERSION 2.8) #加载自定义模块 -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") #设置库文件路径 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) #设置可执行程序路径 @@ -83,14 +83,14 @@ add_compile_options(-Wno-deprecated-declarations) #关闭__FUNCTION__宏在函数外警告 add_compile_options(-Wno-predefined-identifier-outside-function) -#编译静态库 +#编译动态库 if(NOT IOS) add_library(${CMAKE_PROJECT_NAME}_shared SHARED ${SRC_LIST}) set_target_properties(${CMAKE_PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}") install(TARGETS ${CMAKE_PROJECT_NAME}_shared LIBRARY DESTINATION lib) endif(NOT IOS) -#编译动态库 +#编译静态库 add_library(${CMAKE_PROJECT_NAME}_static STATIC ${SRC_LIST}) set_target_properties(${CMAKE_PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}") install(TARGETS ${CMAKE_PROJECT_NAME}_static ARCHIVE DESTINATION lib) @@ -100,7 +100,7 @@ install(DIRECTORY ${PROJECT_BINARY_DIR}/include/${CMAKE_PROJECT_NAME} DESTINATIO #测试程序 if(NOT IOS) -#add_subdirectory(tests) +add_subdirectory(tests) endif(NOT IOS) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 00000000..ee3ab0b7 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,39 @@ +aux_source_directory(. TEST_SRC_LIST) +foreach(TEST_SRC ${TEST_SRC_LIST}) +STRING(REGEX REPLACE ".cpp" "" TEST_EXE_NAME ${TEST_SRC}) +STRING(REGEX REPLACE "./" "" TEST_EXE_NAME ${TEST_EXE_NAME}) +message(STATUS "add test program:${TEST_EXE_NAME}") +add_executable(${TEST_EXE_NAME} ${TEST_SRC}) +target_link_libraries(${TEST_EXE_NAME} ${CMAKE_PROJECT_NAME}_shared pthread) + +#查找mp4v2是否安装 +if(MP4V2_FOUND) +target_link_libraries(${TEST_EXE_NAME} mp4v2) +endif(MP4V2_FOUND) + +#查找x264是否安装 +if(X264_FOUND) +target_link_libraries(${TEST_EXE_NAME} x264) +endif(X264_FOUND) + +#查找faac是否安装 +if(FAAC_FOUND) +target_link_libraries(${TEST_EXE_NAME} faac) +endif(FAAC_FOUND) + +#查找ZLToolKit是否安装 +if(ZLTOOLKIT_FOUND) +target_link_libraries(${TEST_EXE_NAME} ZLToolKit) +endif(ZLTOOLKIT_FOUND) + +#查找openssl是否安装 +if(OPENSSL_FOUND) +target_link_libraries(${TEST_EXE_NAME} ssl) +endif(OPENSSL_FOUND) + +#查找mysql是否安装 +if(MYSQL_FOUND) +target_link_libraries(${TEST_EXE_NAME} mysqlclient) +endif(MYSQL_FOUND) + +endforeach(TEST_SRC ${TEST_SRC_LIST}) diff --git a/tests/test_server.cpp b/tests/test_server.cpp index d8a73d13..7a5f08ef 100644 --- a/tests/test_server.cpp +++ b/tests/test_server.cpp @@ -17,13 +17,12 @@ #include "Util/SqlPool.h" #include "Util/logger.h" #include "Util/onceToken.h" +#include "Util/File.h" #include "Network/TcpServer.h" #include "Poller/EventPoller.h" #include "Thread/WorkThreadPool.h" -#ifdef ENABLE_HKDEVICE -#include "DeviceHK.h" -#endif //ENABLE_HKDEVICE - +#include "Device/PlayerProxy.h" +#include using namespace std; using namespace ZL::Util; using namespace ZL::Http; @@ -31,26 +30,33 @@ using namespace ZL::Rtsp; using namespace ZL::Rtmp; using namespace ZL::Thread; using namespace ZL::Network; +using namespace ZL::DEV; void programExit(int arg) { EventPoller::Instance().shutdown(); } int main(int argc,char *argv[]){ signal(SIGINT, programExit); - Logger::Instance().add(std::make_shared("stdout", LTrace)); - Logger::Instance().setWriter(std::make_shared()); -#ifdef ENABLE_HKDEVICE - DeviceHK::Ptr dev(new DeviceHK()); - dev->connectDevice( connectInfo("192.168.0.211", 8000, "admin", "password"), [dev](bool success,const connectResult &result) { - if(success) { - dev->addAllChannel(); - } - }); -#endif //ENABLE_HKDEVICE - - SSL_Initor::Instance().loadServerPem((exeDir() + ".HttpServer.pem").data()); + //support rtmp and rtsp url + //just support H264+AAC + auto urlList = {"rtmp://live.hkstv.hk.lxdns.com/live/hks", + "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov"}; + map proxyMap; + int i=0; + for(auto url : urlList){ + PlayerProxy::Ptr player(new PlayerProxy("live",std::to_string(i++).data())); + player->play(url); + proxyMap.emplace(string(url),player); + } + //请把证书"test_server.pem"放置在本程序可执行程序同目录下 + try{ + SSL_Initor::Instance().loadServerPem((exePath() + ".pem").data()); + }catch(...){ + FatalL << "请把证书:" << (exeName() + ".pem") << "放置在本程序可执行程序同目录下:" << exeDir() << endl; + return 0; + } TcpServer::Ptr rtspSrv(new TcpServer()); TcpServer::Ptr rtmpSrv(new TcpServer()); @@ -67,12 +73,11 @@ int main(int argc,char *argv[]){ rtmpSrv.reset(); httpSrv.reset(); httpsSrv.reset(); - static onceToken token(nullptr, []() { - UDPServer::Destory(); - WorkThreadPool::Destory(); - EventPoller::Destory(); - Logger::Destory(); - }); + + UDPServer::Destory(); + WorkThreadPool::Destory(); + EventPoller::Destory(); + Logger::Destory(); return 0; } diff --git a/tests/test_server.pem b/tests/test_server.pem new file mode 100644 index 00000000..c6105f4e --- /dev/null +++ b/tests/test_server.pem @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDe56xOopefsL3K+kfpDohkBnjZaTCLVdS+p6BUeRbeFO9xOaGy +5hPnVLHI1nlpRZaKfxm1MY9fDBh1kSbjhSqim9HUBoSvEE32yMM+0GIoNKKDWmhd +ePDXuSNO6d9nabg+5gmrR2fyYtSigTH6liqGSjhblAozlaXVZVYZOs/ePwIDAQAB +AoGAYcjkMALn3SgduoOdNEIp1yd3sHiS0S0wDQtgLG6Kd5ZbjCIqK17/cEYZT++2 +h1X9ungTgQdiy+F0gW7RzpHGp4lso2a8PgEUIt4HICLZqBOWv6kId43kysBZQS/5 +5g0ZGJGU5BFTdHzN5chaPE32MRGPpukNngRuRruRvoQaOuECQQD0EoC6EHwLehFI +KoLnDtzXpR1f4eRRbxJ6U/05Kr4+nz+MB7A2ilGEf+E7iCvoRGYkuieEuKYS9+NQ +Bv67i/aZAkEA6cxan6Q5BsSCoIKGbqATxW40j7m0Ii3VFb4w9vgaI0mHdRl9x59x +LKsIamcJZI7szmJdOi3tBKB9Xc3PxfD6lwJBAIYOU53eyAMVvMBCeTunsizPh97O +F7WSqDeAQilQDMYgearT3jlWp4d7JZ6pIFSmnOO3S1VehfkNJlEiRm+EZKECQCEb ++IV9GzpTH/CdK26FKueduMHV2aWxeeivW33OGt1+bzltF7vqX3uk6Pcwikr8VprP +oUY49MTf+YEMQW1VuBcCQA3UvxGx7YbD3RihysBmTLHyF2DOR3pBQdL1jH5fFI9k +mMo0M2cvHytsIYZ69oULJkQ0TyNBslm/TLaHAK6fHbo= +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIICWDCCAcGgAwIBAgIJANTNO5CfgnKmMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQwHhcNMTYwMTExMDgyNTIxWhcNMTkwMTEwMDgyNTIxWjBF +MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB +gQDe56xOopefsL3K+kfpDohkBnjZaTCLVdS+p6BUeRbeFO9xOaGy5hPnVLHI1nlp +RZaKfxm1MY9fDBh1kSbjhSqim9HUBoSvEE32yMM+0GIoNKKDWmhdePDXuSNO6d9n +abg+5gmrR2fyYtSigTH6liqGSjhblAozlaXVZVYZOs/ePwIDAQABo1AwTjAdBgNV +HQ4EFgQUKOfhSgRHIkKMX7cwlVIBR493EXQwHwYDVR0jBBgwFoAUKOfhSgRHIkKM +X7cwlVIBR493EXQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQCxs7Ge +0mjdtHhFd7qerYVYS0uvVzRdYsYnK+rY6Y5wtXEWDNG2EOLA5/puaj93mvesKXTl +plTjFUnhmyXwwvXuKx+PdK87FXl4sTIyvf4/1eN2QIpy6WU4lAE11ONNF8djNc4W +FCu9etyoYfy6NE4C/ntJpB0xCNrX1cvrmukb6g== +-----END CERTIFICATE-----