webrtc - 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;
}
解决方案
推荐阅读
- python - BeautifulSoup - 在标签后获取文本
- scheme - 等待几秒钟后调用Scheme中的过程?
- vue.js - 使用 Auth Flow With PKCE、MSAL v2、Vue.js 和 Azure Functions 获取 Azure B2C 用户权限(授权用户)
- button - 使用存储在 Google 表格中的 URL 的 Google 站点导航按钮
- r - R - 如何在组内找到变量的对组合
- node.js - Mongoose,MATCH 运算符不返回结果
- arrays - 为什么由 document.getElementById('table') 定义的变量 tbl 返回 null?
- php - 如何防止后退按钮进入 laravel 中的默认身份验证主页?
- apache-spark - delta Lake - 在 pyspark 中插入 sql 失败并出现 java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.expressions.Alias
- c# - 检索信息 BsonDocument