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.
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. 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. Please see sample code below. The code can't really be simpler, and I've no idea why it occurs. Have I missed something obvious? Anyone experienced anything similar? void shutdownStream(RTSPClient* rtspClient, int exitCode) { // Code omitted, as shutdownStream() is identical to the testRTSPClient example // beside having moved Medium::close(rtspClient) to a separate function and adding // the TEARDOWN response handler ... if (someSubsessionsWereActive) rtspClient->sendTeardownCommand(*scs.session, continueAfterTEARDOWN); else cleanUpStream(rtspClient); } else { cleanUpStream(rtspClient); } } void continueAfterTEARDOWN(RTSPClient* rtspClient, int resultCode, char* resultString) { cleanUpStream(rtspClient); } void cleanUpStream(RTSPClient* rtspClient) { UsageEnvironment& env = rtspClient->envir(); env.taskScheduler().deleteEventTrigger(((OurRTSPClient*)rtspClient)->myStart StreamEvent); env.taskScheduler().deleteEventTrigger(((OurRTSPClient*)rtspClient)->myStopS treamEvent); env.taskScheduler().deleteEventTrigger(((OurRTSPClient*)rtspClient)->mySeekA bsoluteEvent); env << *rtspClient << "Closing the stream.\n"; Medium::close(rtspClient); } /Claes
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel