Bien,
-
Lorsque mon client OpenRtsp perd la connexion avec le serveur, je dispose de la fonction l'ancien client et les autres paramètres puis je recrée un nouveau client.
-
Le client envoie avec succès la requête Options,Describe mais échoue ensuite... Je ne peux pas créer de session et de sous-sessions et j'ai des erreurs de violation d'accès...
Comment réinitialiser correctement l'ancien OpenRtspClient afin d'obtenir un nouveau RTSPClient de "marque" ?
Ma méthode actuelle pour réinitialiser un ancien client :
Je viens de modifier la méthode "shutdown" dans la classe playCommon. Je n'ai pas envoyé Teardown...
...
void ResetOurClient(){
if (env != NULL) {
env->taskScheduler().unscheduleDelayedTask(sessionTimerTask);
env->taskScheduler().unscheduleDelayedTask(arrivalCheckTimerTask);
env->taskScheduler().unscheduleDelayedTask(interPacketGapCheckTimerTask);
env->taskScheduler().unscheduleDelayedTask(qosMeasurementTimerTask);
}
closeMediaSinks();
Medium::close(session);
delete ourAuthenticator;
Medium::close(ourClient);
}
Et mon ReStartCode :
void StartOurClient()
{
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);
char* streamURL = "XXXXXXXXX";
// Create our client object:
ourClient = createClient(*env, streamURL, verbosityLevel, progName);
if (ourClient == NULL) {
*env << "Failed to create " << clientProtocolName
<< " client: " << env->getResultMsg() << "\n";
shutdown();
}
if (sendOptionsRequest) {
// Begin by sending an "OPTIONS" command:
getOptions(continueAfterOPTIONS);
} else {
continueAfterOPTIONS(NULL, 0, NULL);
}
// All subsequent activity takes place within the event loop:
env->taskScheduler().doEventLoop(&continuesStream); // does not return
}