我正在编写一个本机WebRTC应用程序,该应用程序现在为客户端转发预编码的帧。那部分很好,但是每次尝试退出应用程序时都会遇到段错误问题,特别是关于如何销毁WebRtcPeerConnectionFactory
的问题。
我通过首先启动分别用于网络,信令和工作的单独线程来实例化此对象,并在析构函数中通过调用thread->Quit()
来杀死这些线程,然后将我的webRtcPeerConnectionFactory
设置为{{1 }}(正如我在源代码示例中的nullptr
文件中所做的那样),但是我会进行段错误或无限期挂起,具体取决于执行前两个操作的顺序。
总的来说,有没有一种正确的方法可以优雅地销毁工厂对象,或者我不调用某些清理函数?我在网上找不到其他利用WebRTC线程模型的示例,因此我不确定从这里继续前进。谢谢!
我对对象的实例化是这样执行的:
conductor.cc
随后的清理工作如下:
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)