diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5fe333d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 2.6) +project(RtspServer LANGUAGES CXX) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug") +endif() + +# 不需要RTSP摘要认证就删除-DAUTH_CONFIG +set(CMAKE_CXX_FLAGS "-g -Wall -std=c++11 -DAUTH_CONFIG") +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DXOP_DEBUG") +set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") + +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}) + +string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE) +message(STATUS "CXX_FLAGS = " ${CMAKE_CXX_FLAGS} " " ${CMAKE_CXX_FLAGS_${BUILD_TYPE}}) + +include_directories(${PROJECT_SOURCE_DIR}/src) +include_directories(${PROJECT_SOURCE_DIR}/src/3rdpart) + +set(NET_SOURCES + ${PROJECT_SOURCE_DIR}/src/net/Acceptor.cpp + ${PROJECT_SOURCE_DIR}/src/net/BufferReader.cpp + ${PROJECT_SOURCE_DIR}/src/net/BufferWriter.cpp + ${PROJECT_SOURCE_DIR}/src/net/EpollTaskScheduler.cpp + ${PROJECT_SOURCE_DIR}/src/net/EventLoop.cpp + ${PROJECT_SOURCE_DIR}/src/net/Logger.cpp + ${PROJECT_SOURCE_DIR}/src/net/MemoryManager.cpp + ${PROJECT_SOURCE_DIR}/src/net/NetInterface.cpp + ${PROJECT_SOURCE_DIR}/src/net/Pipe.cpp + ${PROJECT_SOURCE_DIR}/src/net/SelectTaskScheduler.cpp + ${PROJECT_SOURCE_DIR}/src/net/SocketUtil.cpp + ${PROJECT_SOURCE_DIR}/src/net/TaskScheduler.cpp + ${PROJECT_SOURCE_DIR}/src/net/TcpSocket.cpp + ${PROJECT_SOURCE_DIR}/src/net/TcpServer.cpp + ${PROJECT_SOURCE_DIR}/src/net/Timestamp.cpp + ${PROJECT_SOURCE_DIR}/src/net/Timer.cpp + ${PROJECT_SOURCE_DIR}/src/net/TcpConnection.cpp + ) +add_library(net ${NET_SOURCES}) + +set(XOP_SOURCES + ${PROJECT_SOURCE_DIR}/src/xop/AACSource.cpp + ${PROJECT_SOURCE_DIR}/src/xop/DigestAuthentication.cpp + ${PROJECT_SOURCE_DIR}/src/xop/G711ASource.cpp + ${PROJECT_SOURCE_DIR}/src/xop/H264Parser.cpp + ${PROJECT_SOURCE_DIR}/src/xop/H264Source.cpp + ${PROJECT_SOURCE_DIR}/src/xop/H265Source.cpp + ${PROJECT_SOURCE_DIR}/src/xop/MediaSession.cpp + ${PROJECT_SOURCE_DIR}/src/xop/RtpConnection.cpp + ${PROJECT_SOURCE_DIR}/src/xop/RtspConnection.cpp + ${PROJECT_SOURCE_DIR}/src/xop/RtspMessage.cpp + ${PROJECT_SOURCE_DIR}/src/xop/RtspPusher.cpp + ${PROJECT_SOURCE_DIR}/src/xop/RtspServer.cpp + ) +add_library(xop ${XOP_SOURCES}) + +add_executable(rtsp_server ${PROJECT_SOURCE_DIR}/example/rtsp_server.cpp) +target_link_libraries(rtsp_server xop net pthread) + +add_executable(rtsp_pusher ${PROJECT_SOURCE_DIR}/example/rtsp_pusher.cpp) +target_link_libraries(rtsp_pusher xop net pthread) + +add_executable(rtsp_h264_file ${PROJECT_SOURCE_DIR}/example/rtsp_h264_file.cpp) +target_link_libraries(rtsp_h264_file xop net pthread) + diff --git a/example/rtsp_server.cpp b/example/rtsp_server.cpp index 7ca1f64..3063ef9 100755 --- a/example/rtsp_server.cpp +++ b/example/rtsp_server.cpp @@ -79,7 +79,7 @@ void snedFrameThread(xop::RtspServer* rtspServer, xop::MediaSessionId sessionId, //获取一帧 AAC, 打包 xop::AVFrame audioFrame = {0}; audioFrame.type = xop::AUDIO_FRAME; - audioFrame.size = audio frame size; /* 音频帧大小 + audioFrame.size = audio frame size; // 音频帧大小 audioFrame.timestamp = xop::AACSource::getTimeStamp(44100); // 时间戳 audioFrame.buffer.reset(new uint8_t[audioFrame.size]); memcpy(audioFrame.buffer.get(), audio frame data, audioFrame.size); diff --git a/src/net/BufferWriter.h b/src/net/BufferWriter.h index f6b971f..8aca99d 100644 --- a/src/net/BufferWriter.h +++ b/src/net/BufferWriter.h @@ -47,8 +47,8 @@ class BufferWriter uint32_t writeIndex; } Packet; - std::shared_ptr> _buffer; int _maxQueueLength = 0; + std::shared_ptr> _buffer; static const int kMaxQueueLength = 10000; }; diff --git a/src/net/EventLoop.cpp b/src/net/EventLoop.cpp index 23a260c..93b799b 100644 --- a/src/net/EventLoop.cpp +++ b/src/net/EventLoop.cpp @@ -80,14 +80,13 @@ void EventLoop::loop() _threads.push_back(t); } - int priority = TASK_SCHEDULER_PRIORITY_REALTIME; - for (auto iter : _threads) { #if defined(__linux) || defined(__linux__) #elif defined(WIN32) || defined(_WIN32) - switch (priority) + int priority = TASK_SCHEDULER_PRIORITY_REALTIME; + switch (priority) { case TASK_SCHEDULER_PRIORITY_LOW: SetThreadPriority(iter->native_handle(), THREAD_PRIORITY_BELOW_NORMAL); diff --git a/src/net/Logger.h b/src/net/Logger.h index 382f36a..0b579b4 100644 --- a/src/net/Logger.h +++ b/src/net/Logger.h @@ -48,7 +48,7 @@ class Logger }; } -#ifdef _DEBUG +#ifdef XOP_DEBUG #define LOG_DEBUG(fmt, ...) xop::Logger::instance().log(xop::LOG_DEBUG, __FILE__, __FUNCTION__,__LINE__, fmt, ##__VA_ARGS__) #else #define LOG_DEBUG(fmt, ...) diff --git a/src/net/MemoryManager.cpp b/src/net/MemoryManager.cpp index d11d04f..4b47531 100644 --- a/src/net/MemoryManager.cpp +++ b/src/net/MemoryManager.cpp @@ -56,7 +56,7 @@ void* MemoryPool::Alloc(uint32_t size) std::lock_guard locker(_mutex); if (_head != nullptr) { - MemoryBlock* block = _head; + block = _head; _head = _head->_next; return ((char*)block + sizeof(MemoryBlock)); } @@ -128,4 +128,4 @@ void MemoryManager::Free(void* ptr) { ::free(block); } -} \ No newline at end of file +} diff --git a/src/net/RingBuffer.h b/src/net/RingBuffer.h index b8ceb02..bedabdc 100644 --- a/src/net/RingBuffer.h +++ b/src/net/RingBuffer.h @@ -17,9 +17,9 @@ class RingBuffer { public: RingBuffer(unsigned capacity=60) - : _buffer(capacity) - , _capacity(capacity) + : _capacity(capacity) , _numDatas(0) + , _buffer(capacity) { } ~RingBuffer() { } diff --git a/src/xop/RtspConnection.cpp b/src/xop/RtspConnection.cpp index f363453..6fe3ce8 100644 --- a/src/xop/RtspConnection.cpp +++ b/src/xop/RtspConnection.cpp @@ -16,8 +16,8 @@ using namespace std; RtspConnection::RtspConnection(Rtsp *rtsp, TaskScheduler *taskScheduler, SOCKET sockfd) : TcpConnection(taskScheduler, sockfd) - , _pTaskScheduler(taskScheduler) , _pRtsp(rtsp) + , _pTaskScheduler(taskScheduler) , _rtpChannelPtr(new Channel(sockfd)) , _rtspRequestPtr(new RtspRequest) , _rtspResponsePtr(new RtspResponse)