2 votes

Live555 OpenRTSP Client : Comment supprimer correctement le client rtsp actuel et en démarrer un nouveau ?

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
}

0voto

(Réponse de l'OP dans une question éditée. Convertie en une réponse wiki communautaire. Voir Question sans réponse, mais problème résolu dans les commentaires (ou développé dans le chat) )

Le PO a écrit :

Il y avait une variable statique setUpIter ... [MediaSubsessionIterator* setupIter = NULL;] en setupstreams ...alors faites-en une variable globale non statique et faites-en une NULL à l'adresse ReStart

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X