WebRtc Native-Crashed, когда я вызываю peerconnection->Close()

Как закрыть или уничтожить объект 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

Объявить is 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();
  }

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


person Longer.L    schedule 28.06.2018    source источник


Ответы (1)


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

Шаги, которые я выполнил:

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

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

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

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

и так далее.

Порядок диспозиции:

Сначала отключил RoomClient.

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

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

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

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

person NeverHopeless    schedule 28.06.2018