<div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>I'm happy to see the site is back up and running. I had a few questions during the downtime but given enough time with the LIVE555 source code I was able to figure it out :) So this was a good opportunity to familiarize myself with the classes and APIs.</div><div><br></div><div>In doing so I found a few class members that I would like to request changes to, as mentioned in the <a href="http://www.live555.com/liveMedia/faq.html#cannot-subclass" target="_blank">FAQ</a>.</div><div><br></div><div>I implemented a solution that buffers A/V data from certain codec subclasses of the MultiFramedRTPSource class with the purpose of being written to a file sink that will continue with the live stream as the source for the remainder of the file. My solution also uses custom MediaSession and MediaSubsession classes as mentioned in the example files.</div><div><br></div><div>Request for protected access:</div><div><div>MultiFramedRTPSource::doGetNextFrame() *</div></div><div>MPEG4GenericRTPSource::MPEG4GenericRTPSource() **<br></div><div>MPEG4GenericRTPSource::processSpecialHeader() ***<br></div><div>SimpleRTPSource::processSpecialHeader() ***</div><div><br></div><div><div>* Once the buffer has been sent to the file sink, this function is called to continue the live RTP source to the file sink.</div><div>** This constructor is needed to inherit from this codec class.</div><div>*** Some cameras embed the SPS/PPS NAL units in the same stream as the video data and so the final file output would write the SPS/PPS metadata as an H264 frame, leading to a stuttering effect during playback. I overrode this function in my class template, specialized for the H264 class, to filter out certain metadata NAL units and for the rest of the codec classes I just use this as a pass through function (see below). I could avoid this if you would prefer to keep these private.<br></div></div><div><br></div><div><div>template<class T> Boolean BufferedRTPSource<T>::processSpecialHeader(</div><div>        BufferedPacket* packet, unsigned& resultSpecialHeaderSize)</div><div>{</div><div>    return T::processSpecialHeader(packet, resultSpecialHeaderSize);<br></div><div>}</div></div><div><br></div><div>Thanks,</div><div>Chris</div></div></div></div></div></div></div></div></div></div></div>
</div></div>