WebRtc Собственно-сбой при вызове peerconnection-> Close () - PullRequest
0 голосов
/ 28 июня 2018

Как закрыть или уничтожить объект PeerConnectionInterface? Он разбился, когда я пытался это сделать.

У меня есть объект, объявленный так: rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection;

Он работает нормально после того, как я создаю PeerConnectionInterface на заводе.

Однако, когда сессия закончена, и я пытаюсь вызвать _peerConnection-> Close (); Сбой программы.

И я также пытаюсь вызвать _peerConnection.release () -> Release (); Также разбился.

Я печатаю журналы в PeerConnection.cc, который взят из исходного кода WebRtc, и нахожу, что он здесь потерпел крах, который находится в функциях Close () и ~ PeerConnection ():

webrtc_session_desc_factory_.reset(); //PeerConnection.cc

Объявление std::unique_ptr<WebRtcSessionDescriptionFactory> webrtc_session_desc_factory_;

Поэтому я продолжаю входить в WebRtcSessionDescriptionFactory.cc, функцию ~ WebRtcSessionDescriptionFactory (). Сбой в этой функции: FailPendingRequests ().

Введен в функцию FailPendingRequests ():

RTC_DCHECK(signaling_thread_->IsCurrent());
  while (!create_session_description_requests_.empty()) {
    const CreateSessionDescriptionRequest& request =
        create_session_description_requests_.front();
    //Crashed here in third or fourth loop
    PostCreateSessionDescriptionFailed(request.observer,
        ((request.type == CreateSessionDescriptionRequest::kOffer) ?
            "CreateOffer" : "CreateAnswer") + reason);
    create_session_description_requests_.pop();
  }

Буду очень благодарен за любое предложение!

1 Ответ

0 голосов
/ 28 июня 2018

Я столкнулся с той же проблемой в iOS при реализации библиотеки Kurento. Ключом к решению этой проблемы является правильное распределение ресурсов.

Шаги, за которыми я следовал:

Порядок создания:

Создан объект WebRTCPeer

Создан объект RoomClient

После подключения RoomClient генерируется предложение SDP.

и т. Д.

Порядок расположения:

Сначала отключается RoomClient.

Следил за "RTCIceConnectionState", "RTCIceGatheringState" в событиях WebRTC.

Как только "RTCIceConnectionState" закрывается, а iceGatheringState является "RTCIceGatheringStateComplete", то объект WebRTCPeer удаляется.

Таким образом, проблема была решена, иначе ресурсы были инициализированы и основной объект был удален, что привело к сбоям.

Надеюсь, это поможет!

...