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