<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>I'm using the liveMedia (2012.11.05) connecting to a Cisco VSM (version 6.3.2-47d). The server, as I've mentioned in a previous post, requires the client to wait for the TEARDOWN-response, otherwise the server logs will be filled with errors and things will eventually go bad. This can arguably be considered an issue with the server, but it should anyhow be possible to work around.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>The issue on the client side is that whenever using a TEARDOWN response handler it crashes once in a while. I want to point out that I've has the issue when using sendTeardownCommand() without a response handler. Our client cycles through streams frequently and I'd say I see the problem about 1 time out of 7000. That means about once every other hour when cycling through 10 cameras every 10s. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>After sending TEARDOWN the response handler is never called, but instead an exception is thrown. I haven't been able to catch the exception in the liveMedia DLL, but I instead get an AccessViolationException in the C# code that uses it. Logging shows that the exception happens at the exact same place every time, which is right after calling sendTeardownCommand(), but it never reaches the response handler.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>Please see sample code below.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>The code can't really be simpler, and I've no idea why it occurs.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>Have I missed something obvious? Anyone experienced anything similar?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New";color:blue'>void</span><span style='font-family:"Courier New"'> shutdownStream(RTSPClient* rtspClient, <span style='color:blue'>int</span> exitCode)<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New";color:green'>// Code omitted, as shutdownStream() is identical to the testRTSPClient example<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New";color:green'>// beside having moved Medium::close(rtspClient) to a separate function and adding<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New";color:green'>// the TEARDOWN response handler<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New";color:green'>...<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.5in;text-indent:.5in;text-autospace:none'><span style='font-family:"Courier New";color:blue'>if</span><span style='font-family:"Courier New"'> (someSubsessionsWereActive)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New";color:green'>                </span><span style='font-family:"Courier New";color:black'>rtspClient->sendTeardownCommand(*scs.session, continueAfterTEARDOWN);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>           <span style='color:blue'>else<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>                cleanUpStream(rtspClient);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     <span style='color:blue'>else<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>           cleanUpStream(rtspClient);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     }<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>}</span><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New";color:blue'>void</span><span style='font-family:"Courier New"'> continueAfterTEARDOWN(RTSPClient* rtspClient, <span style='color:blue'>int</span> resultCode, <span style='color:blue'>char</span>* resultString)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     cleanUpStream(rtspClient);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New";color:blue'>void</span><span style='font-family:"Courier New"'> cleanUpStream(RTSPClient* rtspClient)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     UsageEnvironment& env = rtspClient->envir();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     env.taskScheduler().deleteEventTrigger(((OurRTSPClient*)rtspClient)->myStartStreamEvent);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     env.taskScheduler().deleteEventTrigger(((OurRTSPClient*)rtspClient)->myStopStreamEvent);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     env.taskScheduler().deleteEventTrigger(((OurRTSPClient*)rtspClient)->mySeekAbsoluteEvent);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     env << *rtspClient << <span style='color:#A31515'>"Closing the stream.\n"</span>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-family:"Courier New"'>     Medium::close(rtspClient);<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";color:black'>/Claes<o:p></o:p></span></p></div></body></html>