【发布时间】:2023-04-05 07:38:02
【问题描述】:
如何关闭或破坏 PeerConnectionInterface 对象?当我尝试这样做时它崩溃了。
我有一个这样声明的对象:
rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection;
我通过工厂创建 PeerConnectionInterface 后它工作正常。
但是,当会话结束并且我尝试调用 _peerConnection->Close();程序崩溃了。
我也尝试调用 _peerConnection.release()->Release();也崩溃了。
我在WebRtc源码的PeerConnection.cc中打印日志,发现这里crash了,在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();
}
如果有任何建议,我将不胜感激!
【问题讨论】: