2

上手、

  • OpenRtspクライアントがサーバーとの接続を失ったとき、古いクライアントと他のパラメーターを破棄してから、新しいクライアントを再作成します。

  • クライアントはOptions、Describe要求を正常に送信しましたが、その後失敗しました...セッションとサブセッションを作成できないため、アクセス違反エラーが発生しました。

古いOpenRtspClientを適切にリセットして、新しい「ブランド」のRTSPClientを取得するにはどうすればよいですか。

古いクライアントをリセットする現在の方法:

playCommonクラスの「shutdown」メソッドを変更するだけです。ティアダウンは送信しませんでした...

..。

  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
}
4

1 に答える 1