*Environment* 1. Create multiple RTSP server in one process and every server is different thread ( multi-thread ). 2. Create 100 session to play video from the multiple RTSP server at the same time, so every server will be handle some sessions.
*Warning Message :* - MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (2884). 1731 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least 3181, *before* creating this 'RTPSink'. (Current value is 1450.) - MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (2884). 9449 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least 10899, *before* creating this 'RTPSink'. (Current value is 1450.) - MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (2884). 350 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least 1800, *before* creating this 'RTPSink'. (Current value is 1450.) - MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (2884). 926 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least 2376, *before* creating this 'RTPSink'. (Current value is 1450.) *Root Cause :* - *OutPacketBuffer::maxSize* type is *static*, when multi-thread running, the value will be modified at class *RTCPInstance* constructor, show source code below: // A hack to save buffer space, because RTCP packets are always small: unsigned savedMaxSize = OutPacketBuffer::maxSize; *OutPacketBuffer::maxSize* = maxRTCPPacketSize; fOutBuf = new OutPacketBuffer(preferredPacketSize, maxRTCPPacketSize); OutPacketBuffer::maxSize = savedMaxSize; if (fOutBuf == NULL) return; *Analysis :* - *RTCPInstance* constructor modify *OutPacketBuffer::maxSize* just want to help class *OutPacketBuffer* constructor compute *maxNumPackets*, show source below : *MediaSink.cpp* OutPacketBuffer::OutPacketBuffer(unsigned preferredPacketSize,unsigned maxPacketSize) : fPreferred(preferredPacketSize), fMax(maxPacketSize), fOverflowDataSize(0) { unsigned *maxNumPackets* = (*maxSize* + (maxPacketSize-1))/maxPacketSize; fLimit = maxNumPackets*maxPacketSize; fBuf = new unsigned char[fLimit]; resetPacketStart(); resetOffset(); resetOverflowData(); } *Resolve :* - Add new constructor for OutPacketBuffer and pre-compute the maxNumPackets value then pass it. *RTCP.cpp* #if 0 // A hack to save buffer space, because RTCP packets are always small: unsigned savedMaxSize = OutPacketBuffer::maxSize; OutPacketBuffer::maxSize = maxRTCPPacketSize; fOutBuf = new OutPacketBuffer(preferredPacketSize, maxRTCPPacketSize); OutPacketBuffer::maxSize = savedMaxSize; if (fOutBuf == NULL) return; #else *unsigned maxNumPackets = (maxRTCPPacketSize + (maxRTCPPacketSize-1))/maxRTCPPacketSize;* fOutBuf = new OutPacketBuffer(preferredPacketSize, maxRTCPPacketSize, *maxNumPackets*); if (fOutBuf == NULL) return; #endif *MediaSink.cpp* OutPacketBuffer::OutPacketBuffer(unsigned preferredPacketSize,unsigned maxPacketSize, *unsigned maxNumPackets*) : fPreferred(preferredPacketSize), fMax(maxPacketSize), fOverflowDataSize(0) { fLimit = maxNumPackets*maxPacketSize; fBuf = new unsigned char[fLimit]; resetPacketStart(); resetOffset(); resetOverflowData(); } BR ChunWei
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel