当我调用peerconnection->;时WebRtc Native崩溃;关闭()

当我调用peerconnection->;时WebRtc Native崩溃;关闭(),webrtc,peer-connection,Webrtc,Peer Connection,如何关闭或销毁PeerConnectionInterface对象?当我试图这么做时,它崩溃了 我有一个这样声明的对象: rtc::作用域\u refptr\u对等连接 在我通过工厂创建PeerConnectionInterface之后,它工作得很好 但是,当会话结束时,我尝试调用_peerConnection->Close();程序崩溃了 我还尝试调用_peerConnection.release()->release();飞机也坠毁了 我打印来自WebRtc源代码的PeerConnection

如何关闭或销毁PeerConnectionInterface对象?当我试图这么做时,它崩溃了

我有一个这样声明的对象:

rtc::作用域\u refptr\u对等连接

在我通过工厂创建PeerConnectionInterface之后,它工作得很好

但是,当会话结束时,我尝试调用_peerConnection->Close();程序崩溃了

我还尝试调用_peerConnection.release()->release();飞机也坠毁了

我打印来自WebRtc源代码的PeerConnection.cc中的日志,发现它在这里崩溃了,在Close()函数和~PeerConnection()函数中:

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();
  }
webrtc_session_desc_factory_.reset()//PeerConnection.cc

声明是

std::唯一\u ptr webrtc\u会话\u描述\u工厂\uu

因此,我继续登录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();
  }

如果有任何建议,我将不胜感激

在iOS中实现Kurento库时,我遇到了同样的问题。解决此问题的关键是以正确的方式处理资源

我采取了以下步骤:

创作顺序:

已创建WebRTCPeer对象

已创建RoomClient对象

RoomClient连接后,生成SDP报价

等等

处置顺序:

先断开RoomClient的连接

密切关注WebRTC事件中的“RticeConnectionState”、“RticeCollectionState”

一旦“RTICeConnectionState”关闭且ICeColgatingState为“RTICeColgatingStateComplete”,则释放WebRTCPeer对象

通过这种方式解决了问题,否则资源将被初始化,主要对象将被处置,这将导致崩溃

希望有帮助