WebRTC PeerConnectionFactory正常关闭

WebRTC PeerConnectionFactory正常关闭,webrtc,Webrtc,我正在编写一个本机WebRTC应用程序,它现在为客户端转发预编码的帧。这一部分很好,但每次尝试退出应用程序时,我都会遇到segfault问题,特别是关于如何销毁我的webrtpeerconnectionfactory 我正在实例化这个对象,首先分别为联网、发信号和工作启动单独的线程,在我的析构函数中,先调用thread->Quit(),然后将我的webrtpeerconnectionfactory设置为nullptr(正如我在源代码的示例中看到的,它们的conductor.cc文件中都有),但根

我正在编写一个本机WebRTC应用程序,它现在为客户端转发预编码的帧。这一部分很好,但每次尝试退出应用程序时,我都会遇到segfault问题,特别是关于如何销毁我的
webrtpeerconnectionfactory

我正在实例化这个对象,首先分别为联网、发信号和工作启动单独的线程,在我的析构函数中,先调用
thread->Quit()
,然后将我的
webrtpeerconnectionfactory
设置为
nullptr
(正如我在源代码的示例中看到的,它们的
conductor.cc
文件中都有),但根据前面两个操作的执行顺序,我要么选择segfault,要么无限期挂起

在较高的层次上,是否有正确的方法优雅地销毁factory对象,或者是否有一些我不调用的清理功能?我在网上找不到任何其他利用WebRTC线程模型的示例,因此我不确定从这里继续。谢谢

我对对象的实例化是这样执行的:

rtc_network_thread_ = rtc::Thread::CreateWithSocketServer();
rtc_worker_thread_ = rtc::Thread::Create();
rtc_signaling_thread_ = rtc::Thread::Create();
if (!rtc_network_thread_->Start() || !rtc_worker_thread_->Start() || !rtc_signaling_thread->Start()) {
    // error handling
}
peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
    rtc_network_thread_.get(), rtc_worker_thread_.get(), rtc_signaling_thread_.get(),
    nullptr, webrtc::CreateBuiltInAudioEncoderFactory(), webrtc::CreateBuiltInAudioDecoderFactory(),
    dummy_encoder_factory_.get(), nullptr)
我随后的清理如下所示:

rtc_worker_thread_->Quit();
rtc_network_thread_->Quit();
rtc_signaling_thread_->Quit();

if (peer_connection_factory_) {
    // errors occur here, either with setting to nullptr or with threads
    // quitting if I quit the threads after setting my factory to a nullptr
    peer_connection_factory_ = nullptr;
 }

我认为它需要事件线程。在销毁
PeerConnection
(或者
PeerConnectionFactory
)时,库会执行一些“元调用”这会导致重新进入事件循环的回调函数。总的来说,关闭没有什么特别的。感谢@Velkan的评论,你是说我已经提前终止了事件线程,还是说我没有正确地使用它的事件队列?我添加了一些片段,说明我是如何继续实例化和删除的n帖子。谢谢你的帮助!我遇到了一个类似的问题,我在线程上调用
quit
,然后将工厂设置为
nullptr
,但它一直在等待。