调用peerconnection-> Close()时WebRtc本机崩溃

时间:2018-06-28 03:11:24

标签: webrtc peer-connection

如何关闭或销毁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()函数〜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 :(得分:1)

实施Kurento Library时,我在iOS中也遇到了同样的问题。解决此问题的关键是正确配置资源。

我遵循的步骤:

创建顺序:

  

创建的WebRTCPeer对象

     

创建的RoomClient对象

     

一旦RoomClient连接,就会生成SDP报价。

     

以此类推。

处置顺序:

  

首先断开RoomClient的连接。

     

关注WebRTC事件中的“ RTCIceConnectionState”,“ RTCIceGatheringState”。

     

一旦“ RTCIceConnectionState”关闭并且iceGatheringState为“ RTCIceGatheringStateComplete”,则处置WebRTCPeer对象。

这样可以解决问题,否则将初始化资源并处置主要对象,从而导致崩溃。

希望有帮助!