首页 > 解决方案 > WebRTC PeerConnectionFactory 优雅关闭

问题描述

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

我通过首先为网络、信号和工作分别启动单独的线程来实例化这个对象,并在我的析构函数中通过thread->Quit()在将 my 设置webRtcPeerConnectionFactory为 a之前调用来杀死这些线程nullptr(正如我在源代码中的示例中看到的那样在他们的conductor.cc文件中),但我要么段错误,要么无限期挂起,具体取决于采取前两个操作的顺序。

在高层次上,是否有正确的方法来优雅地销毁工厂对象,或者是否有一些我没有调用的清理函数?我在网上找不到任何其他利用 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;
 }

标签: webrtc

解决方案


推荐阅读