[Live-devel] Crash in RTSPServer.cpp
Jeremy Noring
jnoring at logitech.com
Wed May 12 13:56:44 PDT 2010
On Tue, May 11, 2010 at 4:42 PM, Jeremy Noring <jnoring at logitech.com> wrote:
> On Fri, May 7, 2010 at 9:28 AM, Jeremy Noring <jnoring at logitech.com>wrote:
>
>> On Fri, Apr 30, 2010 at 4:19 PM, Ross Finlayson <finlayson at live555.com>wrote:
>>
>>>
>>> It would be nice to find a simple, repeatable sequence of client
>>> operations that cause the crash. E.g., does crash ever happen if there are
>>> two complete "DESCRIBE, SETUP, SETUP, PLAY, TEARDOWN" sequences in order
>>> (i.e., not overlapping), or does it occur only when two such sequences
>>> overlap? Once you've found a repeatable situation that causes the crash,
>>> then you could also test with RTP-over-UDP, and with "reuseFirstSource" set
>>> to False.
>>
>>
Okay, I've now managed to reproduce this with openRTSP and
testOnDemandRTSPServer (which is what our RTSP server is modeled after). To
reproduce it, you need to:
1. Have your RTSP server deliver a media session with multiple subsessions.
(i.e. simply trying to reproduce with mp3AudioTest will not work; you have
to have a session with audio _and_ video, for example). I simply combined
the .wav and .mp3 sessions into one:
{
char const* streamName = "mp3AudioTest";
char const* inputFileName = "test.mp3";
ServerMediaSession* sms
= ServerMediaSession::createNew(*env, streamName, streamName,
descriptionString);
Boolean useADUs = False;
Interleaving* interleaving = NULL;
#ifdef STREAM_USING_ADUS
useADUs = True;
#ifdef INTERLEAVE_ADUS
unsigned char interleaveCycle[] = {0,2,1,3}; // or choose your own...
unsigned const interleaveCycleSize
= (sizeof interleaveCycle)/(sizeof (unsigned char));
interleaving = new Interleaving(interleaveCycleSize, interleaveCycle);
#endif
#endif
sms->addSubsession(MP3AudioFileServerMediaSubsession
::createNew(*env, inputFileName, reuseFirstSource,
useADUs, interleaving));
// To convert 16-bit PCM data to 8-bit u-law, prior to streaming,
// change the following to True:
inputFileName = "test.wav";
Boolean convertToULaw = False;
sms->addSubsession(WAVAudioFileServerMediaSubsession
::createNew(*env, inputFileName, reuseFirstSource,
convertToULaw));
rtspServer->addServerMediaSession(sms);
announceStream(rtspServer, sms, streamName, inputFileName);
}
2. Set reuseFirstSource to True
3. Run multiple openRTSP instances to repeatedly hit the RTSP server
streaming with TCP. I use "openRTSP -t -d 1 url", and have a small program
that calls that repeatedly.
Next, I'm going to isolate if this is regression in the codebase, or if it's
something that was a problem before the recent RTP-over-TCP changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.live555.com/pipermail/live-devel/attachments/20100512/85585632/attachment.html>
More information about the live-devel
mailing list