<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p>Thanks for the advice, I haven't fixed the crash, but I've stopped it from happening, I think.</p>
<p>In case anyone else hits this issue, I moved the call to deleteServerMediaSession() to before the calls to close down the streams, so my server shutdown code now looks like this:-</p>
<pre>void CRTSPWrapper::RemoveSMS()<br />{<br />    streamStream_t *stream = m_StreamArray[m_StreamIndex];<br />    rtspServer->deleteServerMediaSession(stream->sms);<br />    if (stream->isMulticast)<br />    {<br />        Medium::close(stream->rtcp);<br />        Medium::close(stream->sink);<br />        Medium::close(stream->framedSource);<br />        delete stream->rtcpGroupsock;<br />        delete stream->rtpGroupsock;<br />    }<br />    stream->iRefCount = 0;<br />    stream->sms = NULL;<br />    m_RemoveSuccess = 1;<br />}<br /><br />David J Myers<br />AMG Panogenics<br /><br />>Unfortunately, because the crash is triggered by (though not necessarily occurring in) your own application, which I can’t reproduce, you’re going to have to be specific about exactly where the crash is occurring, and why.  (If you’re not already doing so, I suggest replacing the “-O” compile flag with “-g”, and running your server under “gdb”.)

>><em> It seems that there is no client session to destroy if the rtp multicast address method is used, neither is the reference count incremented in this case.
</em>><em> >
</em>
>Of course.  I suspect that you may be misunderstanding the difference between “<a href="rtp://%E2%80%9C">rtp://“</a> and “<a href="rtsp://%E2%80%9C">rtsp://“</a> URLs.  “<a href="rtp://%E2%80%9C">rtp://“</a> URLs are non-standard and specific only to VLC; they tell VLC to bind to a particular IP address and port number.  This causes no interaction with the server, so (obviously) the server doesn’t know when client(s) are listening to the (multicast) stream this way.

>A “<a href="rtsp://%E2%80%9C">rtsp://“</a> URL uses the (IETF standard) RTSP protocol - a unicast protocol (over TCP) that involves contacting the server, and asking the server for details about the stream (a multicast stream, in this case), and how to listen to it.

Ross Finlayson
Live Networks, Inc.
<a href="http://www.live555.com/">http://www.live555.com/</a></pre>
<div> </div>
<p>On 2015-04-27 12:52, david.myers@panogenics.com wrote:</p>
<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px"><!-- html ignored --><!-- head ignored --><!-- meta ignored -->
<p>In order to switch my server implementation from multicast to unicast, I use the following function in my live555 wrapper code to close the current session before re-opening the new session.</p>
<p>void CRTSPWrapper::RemoveSMS()<br />{<br />    streamStream_t *stream = m_StreamArray[m_StreamIndex];<br />    if (stream->isMulticast)<br />    {<br />        Medium::close(stream->rtcp);<br />        Medium::close(stream->sink);<br />        Medium::close(stream->framedSource);<br />        delete stream->rtcpGroupsock;<br />        delete stream->rtpGroupsock;<br />    }<br />    rtspServer->deleteServerMediaSession(stream->sms);<br />    stream->iRefCount = 0;<br />    stream->sms = NULL;<br />    m_RemoveSuccess = 1;<br />}</p>
<p>I'm using VLC as the client to test this and I can connect to my server using a multicast url of the form:- rtp://@224.50.87.90:3000</p>
<p>I can also connect using the unicast address form:- rtsp://10.50.87.90:554/stream0</p>
<p>I find, if I have a unicast connection to the server and I call the above code to shut it down, I get a segmentation fault in deleteServerMediaSession. I don't get this crash if I connect only via the multicast addressing method.</p>
<p>Digging a bit deeper, I'm finding the crash to be in the (RTSPServer.cpp) reclaimStreamStates() function called from the RTSPClientSession destructor. I suspect fStreamStates[i].subsession is not NULL but not legitimate, but I've no idea why not.</p>
<p>It seems that there is no client session to destroy if the rtp multicast address method is used, neither is the reference count incremented in this case.</p>
<p>Any advice or help would be appreciated.</p>
<p>- David J Myers</p>
<div> </div>
</blockquote>
<hr />
<pre>Unfortunately, because the crash is triggered by (though not necessarily occurring in) your own application, which I can’t reproduce, you’re going to have to be specific about exactly where the crash is occurring, and why.  (If you’re not already doing so, I suggest replacing the “-O” compile flag with “-g”, and running your server under “gdb”.)

><em> It seems that there is no client session to destroy if the rtp multicast address method is used, neither is the reference count incremented in this case.
</em>>
Of course.  I suspect that you may be misunderstanding the difference between “<a href="rtp://%E2%80%9C">rtp://“</a> and “<a href="rtsp://%E2%80%9C">rtsp://“</a> URLs.  “<a href="rtp://%E2%80%9C">rtp://“</a> URLs are non-standard and specific only to VLC; they tell VLC to bind to a particular IP address and port number.  This causes no interaction with the server, so (obviously) the server doesn’t know when client(s) are listening to the (multicast) stream this way.

A “<a href="rtsp://%E2%80%9C">rtsp://“</a> URL uses the (IETF standard) RTSP protocol - a unicast protocol (over TCP) that involves contacting the server, and asking the server for details about the stream (a multicast stream, in this case), and how to listen to it.

Ross Finlayson
Live Networks, Inc.
<a href="http://www.live555.com/">http://www.live555.com/</a></pre>
</body></html>