Live555 OpenRTSP Client: как правильно удалить текущий клиент rtsp и запустить новый

Хорошо,

  • Когда мой клиент OpenRtsp потерял соединение с сервером, я удаляю старый клиент и другие параметры, а затем заново создаю новый клиент.

  • Клиент отправляет параметры, Опишите запрос успешно, но после этого произошел сбой... Я не могу создать сеанс и подсеансы, поэтому я получил ошибки нарушения прав доступа.

Как правильно сбросить старый OpenRtspClient, чтобы получить новый «фирменный» RTSPClient?

Мой текущий способ сброса старого клиента:

Я просто изменяю метод «выключения» в классе playCommon. Я не посылал 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);
}

И мой 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
}

person Novalis    schedule 22.11.2011    source источник


Ответы (1)


(Отвечено OP в редактировании вопроса. Преобразовано в ответ вики сообщества. См. Вопрос без ответов, но проблема решена в комментариях (или дополнена в чате) )

ОП написал:

Ну, была статическая переменная setUpIter...[MediaSubsessionIterator* setupIter = NULL;] в методе setupstreams... поэтому сделайте ее глобальной нестатической переменной и сделайте ее NULL в ReStart

person Community    schedule 30.01.2015