Hi Ross, I use the MPEG2TransportStreamFromESSource class to stream H264 frames using an MPEG transport stream. It happens that the encoder I use has some frames larger than the 100 KB buffer size.
I know you have repeated many times on this list that we should configure the encoder to use slices instead of large frames, but since you provide OutPacketBuffer::maxSize to increase the default size of RTPSink objects, I thought that it would make sense to have a way to change the size of the MPEG2TransportStreamFromESSource objects buffer too. So, here is a patch adding a parameter to the class addNewVideoSource and addNewAudioSource methods, to do just that. The parameter has a default value of 0, which is converted internally to INPUT_BUFFER_SIZE, so as to avoid breaking existing users of this class. Thanks in advance. Regards. diff -Naurdp live.2016.05.20.orig/liveMedia/MPEG2TransportStreamFromESSource.cpp live.2016.05.20/liveMedia/MPEG2TransportStreamFromESSource.cpp --- live.2016.05.20.orig/liveMedia/MPEG2TransportStreamFromESSource.cpp 2016-05-20 02:11:05.000000000 +0200 +++ live.2016.05.20/liveMedia/MPEG2TransportStreamFromESSource.cpp 2016-06-09 15:21:58.000000000 +0200 @@ -32,6 +32,7 @@ class InputESSourceRecord { public: InputESSourceRecord(MPEG2TransportStreamFromESSource& parent, FramedSource* inputSource, + unsigned bufferSize, u_int8_t streamId, int mpegVersion, InputESSourceRecord* next, int16_t PID = -1); virtual ~InputESSourceRecord(); @@ -80,16 +81,16 @@ MPEG2TransportStreamFromESSource* MPEG2T } void MPEG2TransportStreamFromESSource -::addNewVideoSource(FramedSource* inputSource, int mpegVersion, int16_t PID) { +::addNewVideoSource(FramedSource* inputSource, int mpegVersion, int16_t PID, unsigned bufferSize) { u_int8_t streamId = 0xE0 | (fVideoSourceCounter++&0x0F); - addNewInputSource(inputSource, streamId, mpegVersion, PID); + addNewInputSource(inputSource, streamId, mpegVersion, PID, bufferSize); fHaveVideoStreams = True; } void MPEG2TransportStreamFromESSource -::addNewAudioSource(FramedSource* inputSource, int mpegVersion, int16_t PID) { +::addNewAudioSource(FramedSource* inputSource, int mpegVersion, int16_t PID, unsigned bufferSize) { u_int8_t streamId = 0xC0 | (fAudioSourceCounter++&0x0F); - addNewInputSource(inputSource, streamId, mpegVersion, PID); + addNewInputSource(inputSource, streamId, mpegVersion, PID, bufferSize); } MPEG2TransportStreamFromESSource @@ -146,10 +147,10 @@ void MPEG2TransportStreamFromESSource void MPEG2TransportStreamFromESSource ::addNewInputSource(FramedSource* inputSource, - u_int8_t streamId, int mpegVersion, int16_t PID) { + u_int8_t streamId, int mpegVersion, int16_t PID, unsigned bufferSize) { if (inputSource == NULL) return; - fInputSources = new InputESSourceRecord(*this, inputSource, streamId, - mpegVersion, fInputSources, PID); + fInputSources = new InputESSourceRecord(*this, inputSource, bufferSize, + streamId, mpegVersion, fInputSources, PID); } @@ -158,11 +159,12 @@ void MPEG2TransportStreamFromESSource InputESSourceRecord ::InputESSourceRecord(MPEG2TransportStreamFromESSource& parent, FramedSource* inputSource, + unsigned bufferSize, u_int8_t streamId, int mpegVersion, InputESSourceRecord* next, int16_t PID) : fNext(next), fParent(parent), fInputSource(inputSource), fStreamId(streamId), fMPEGVersion(mpegVersion), fPID(PID) { - fInputBuffer = new unsigned char[INPUT_BUFFER_SIZE]; + fInputBuffer = new unsigned char[bufferSize ? bufferSize : INPUT_BUFFER_SIZE]; reset(); } diff -Naurdp live.2016.05.20.orig/liveMedia/include/MPEG2TransportStreamFromESSource.hh live.2016.05.20/liveMedia/include/MPEG2TransportStreamFromESSource.hh --- live.2016.05.20.orig/liveMedia/include/MPEG2TransportStreamFromESSource.hh 2016-05-20 02:11:05.000000000 +0200 +++ live.2016.05.20/liveMedia/include/MPEG2TransportStreamFromESSource.hh 2016-06-09 15:15:03.000000000 +0200 @@ -30,9 +30,9 @@ class MPEG2TransportStreamFromESSource: public: static MPEG2TransportStreamFromESSource* createNew(UsageEnvironment& env); - void addNewVideoSource(FramedSource* inputSource, int mpegVersion, int16_t PID = -1); + void addNewVideoSource(FramedSource* inputSource, int mpegVersion, int16_t PID = -1, unsigned bufferSize = 0); // Note: For MPEG-4 video, set "mpegVersion" to 4; for H.264 video, set "mpegVersion" to 5. - void addNewAudioSource(FramedSource* inputSource, int mpegVersion, int16_t PID = -1); + void addNewAudioSource(FramedSource* inputSource, int mpegVersion, int16_t PID = -1, unsigned bufferSize = 0); // Note: In these functions, if "PID" is not -1, then it (currently, just the low 8 bits) // is used as the stream's PID. Otherwise (if "PID" is -1) the 'stream_id' is used as // the PID. @@ -43,7 +43,7 @@ protected: virtual ~MPEG2TransportStreamFromESSource(); void addNewInputSource(FramedSource* inputSource, - u_int8_t streamId, int mpegVersion, int16_t PID = -1); + u_int8_t streamId, int mpegVersion, int16_t PID = -1, unsigned bufferSize = 0); // used to implement addNew*Source() above private: -- Gilles. https://click-hack.org _______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel