如何关闭或销毁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();
}
我将非常感谢您的任何建议!
答案 0 :(得分:1)
实施Kurento Library时,我在iOS中也遇到了同样的问题。解决此问题的关键是正确配置资源。
我遵循的步骤:
创建顺序:
创建的WebRTCPeer对象
创建的RoomClient对象
一旦RoomClient连接,就会生成SDP报价。
以此类推。
处置顺序:
首先断开RoomClient的连接。
关注WebRTC事件中的“ RTCIceConnectionState”,“ RTCIceGatheringState”。
一旦“ RTCIceConnectionState”关闭并且iceGatheringState为“ RTCIceGatheringStateComplete”,则处置WebRTCPeer对象。
这样可以解决问题,否则将初始化资源并处置主要对象,从而导致崩溃。
希望有帮助!