【问题标题】:WebRTC Peer to Peer ConnectionWebRTC 点对点连接
【发布时间】:2016-10-16 01:34:31
【问题描述】:

我正在使用 C++ 为音频呼叫实现 WebRTC 点对点连接。

我有两个线程 _worker_thread_signaling_thread。现在,当我尝试通过调用方法webrtc::CreatePeerConnectionFactory() 创建_peerConnectionFactory 时,我的应用程序崩溃了。我怎样才能让它发挥作用?

_signaling_thread.reset(new rtc::Thread());
if(!_signaling_thread->Start())
{
    printf("_signaling_thread is Failed");
    return;
}
_worker_thread.reset(new rtc::Thread());
if (!_worker_thread->Start()) {
    printf( "_worker_thread is Failed");
    return;
}

_peerConnectionFactory = webrtc::CreatePeerConnectionFactory(_worker_thread.get(),_signaling_thread.get(),NULL,NULL,NULL);

这是我得到的回溯

* thread #15: tid = 0x17e516, 0x00000001008d5674 MyAPP`rtc::MessageQueue::Get(rtc::Message*, int, bool) + 816, stop reason =  EXC_BAD_ACCESS (code=1, address=0x100000038)                                              
* frame #0: 0x00000001008d5674 MyAPP`rtc::MessageQueue::Get(rtc::Message*, int, bool) + 816
frame #1: 0x00000001008e5fb0 MyAPP`rtc::Thread::ProcessMessages(int) + 100
frame #2: 0x00000001008e5e44 MyAPP`rtc::Thread::PreRun(void*) + 88
frame #3: 0x0000000199337b3c libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x0000000199337aa0 libsystem_pthread.dylib`_pthread_start + 1

【问题讨论】:

  • 帖子中没有问题,但不知何故被点赞了 2 次。我想知道是谁投了赞成票,为什么。
  • @SergeyA 我需要解决方案,为什么它不适合我,有没有办法解决这个问题?还有什么你需要知道的请告诉我。
  • 不清楚回溯与发布的代码有何关系。从rtc::MessageQueue::Get 偏移 816 处会发生什么?为什么以及何时调用该函数?从pthread 行来看,我猜这发生在其中一个后台线程中。你能说是哪个吗?
  • @AustinMullins - 'rtc::MessageQueue::Get' 这个方法在我的信号线程启动时被调用。是的,有一个后台线程正在调用上面提到的代码,基本上这组代码是用于建立对等 Webrtc 连接。
  • 您可以编辑您的问题以包含 Get 方法吗?这就是段错误(Bad Access)所在。

标签: c++ multithreading webrtc


【解决方案1】:

查看 WebRTC 源代码中的 PeerConnection 示例后,我总是在创建线程之前初始化 SSL 模块,如下所示:

bool Core::Init() {
  rtc::InitializeSSL();
  rtc::InitRandom(rtc::Time());
  rtc::ThreadManager::Instance()->WrapCurrentThread();

  _signalingThread = new rtc::Thread();
  _workerThread = new rtc::Thread();

  _signalingThread->SetName("signaling_thread", NULL);
  _workerThread->SetName("worker_thread", NULL);

  if (!_signalingThread->Start() || !_workerThread->Start()) {
    return false;
  }

  _peerConnectionFactory =
      webrtc::CreatePeerConnectionFactory(_signalingThread,
                                          _workerThread,
                                          NULL, NULL, NULL).release();

  return true;
}

【讨论】:

  • 为什么在 peerConnectionFactory 上调用release()
  • 是的,为什么要在 peerConnectionFactory 对象上调用 .release()?
  • @Phylliida @JSON 返回值是std::unique_ptr,所以他想取得指针的所有权
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多