From 4ef430e946e717d72e923c4708a9120f94d55dbd Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 28 十二月 2016 09:35:14 +0800 Subject: [PATCH] test h264 encoder --- RtspFace/PL_RTSPServer.cpp | 78 ++++++++++++++++++++++++++------------ 1 files changed, 53 insertions(+), 25 deletions(-) diff --git a/RtspFace/PL_RTSPServer.cpp b/RtspFace/PL_RTSPServer.cpp index feb25ac..ad5d1f9 100644 --- a/RtspFace/PL_RTSPServer.cpp +++ b/RtspFace/PL_RTSPServer.cpp @@ -12,8 +12,11 @@ struct RTSPServer_Internal { - uint8_t* buffer; + uint8_t buffer[1920*1080*3]; size_t buffSize; + size_t buffSizeMax; + + RTSPServerConfig config; bool payError; pthread_t live_daemon_thid; @@ -24,7 +27,7 @@ MyEncoderStub * encoderStub; RTSPServer_Internal() : - buffer(nullptr), buffSize(0), + buffSize(0), buffSizeMax(sizeof(buffer)), config(), payError(true), live_daemon_thid(0), frame_mutex(new pthread_mutex_t), live_daemon_running(false), server(nullptr), encoderStub(nullptr) { @@ -43,8 +46,10 @@ void reset() { - buffer = nullptr; buffSize = 0; + + RTSPServerConfig _config; + config =_config; payError = true; @@ -84,32 +89,43 @@ virtual char GetFrame(u_int8_t** FrameBuffer, unsigned int *FrameSize) { - if (in.buffer != nullptr && in.buffSize > 0) - { - *FrameBuffer = in.buffer; - *FrameSize = in.buffSize; - - printf("send frame size=%u\n", in.buffSize); - - in.buffer = nullptr; - in.buffSize = 0; - - return 1; - } - else + if (in.buffer == nullptr || in.buffSize <= 0) { ReleaseFrame(); return 0; } + + uint8_t* pBuffer = in.buffer; + size_t newBufferSize = in.buffSize; + if (in.config.payWithAux) + { + if (newBufferSize <= 4) + { + ReleaseFrame(); + return 0; + } + pBuffer += 4; + newBufferSize -= 4; + } + + *FrameBuffer = pBuffer; + *FrameSize = newBufferSize; + + printf("send frame size=%u\n", in.buffSize); } virtual char ReleaseFrame() { - int ret = pthread_mutex_unlock(in.frame_mutex); - if(ret != 0) + in.buffSize = 0; + + if (in.config.syncDeliverFrame) { - printf("pthread_mutex_unlock frame_mutex: %s/n", strerror(ret)); - return 0; + int ret = pthread_mutex_unlock(in.frame_mutex); + if(ret != 0) + { + printf("pthread_mutex_unlock frame_mutex: %s/n", strerror(ret)); + return 0; + } } return 1; @@ -120,11 +136,14 @@ // write frame buffer of RTSPServer_Internal::buffer onFrame(); - int ret = pthread_mutex_lock(in.frame_mutex); - if(ret != 0) + if (in.config.syncDeliverFrame) { - printf("pthread_mutex_lock frame_mutex: %s/n", strerror(ret)); - return; + int ret = pthread_mutex_lock(in.frame_mutex); + if(ret != 0) + { + printf("pthread_mutex_lock frame_mutex: %s/n", strerror(ret)); + return; + } } } @@ -167,6 +186,12 @@ RTSPServer_Internal* in = (RTSPServer_Internal*)internal; in->reset(); + if (args) + { + RTSPServerConfig* config = (RTSPServerConfig*)args; + in->config = *config; + } + int ret = pthread_create(&(in->live_daemon_thid), NULL, live_daemon_thd, in); if(ret != 0) { @@ -191,7 +216,10 @@ if (pm.buffer == nullptr || pm.buffSize <= 0) return false; - in->buffer = pm.buffer; + if (in->buffSize > 0) + printf("PL_RTSPServer::pay may lost data size=%u\n", in->buffSize); + + memcpy(in->buffer, pm.buffer, pm.buffSize); in->buffSize = pm.buffSize; if (in->encoderStub == nullptr) -- Gitblit v1.8.0