[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