Live555 OpenRTSP Client: Как правильно удалить текущий rtsp-клиент и запустить новый - PullRequest
2 голосов
/ 22 ноября 2011

Ну,

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

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

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

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

Я просто изменяюметод shutdown в классе 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
}

1 Ответ

0 голосов
/ 30 января 2015

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

ОП написал:

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

...