2015-09-23 3 views
5

Я реализую подключение через одноранговое соединение WebRTC для аудиовызова с использованием C++.WebRTC Peer to Peer Connection

У меня есть две темы: _worker_thread и _signaling_thread. Теперь, когда я пытаюсь создать _peerConnectionFactory, вызывая метод webrtc::CreatePeerConnectionFactory(), мое приложение падает. Как я могу заставить его работать?

_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 
+0

В сообщении нет сомнений, но почему-то это было отменено 2 раза. Интересно, кто сделал аванс и почему. – SergeyA

+0

@SergeyA Мне нужно решение, почему он не работает для меня, есть ли способ решить эту проблему? И что еще вам нужно знать, пожалуйста, дайте мне знать. – Aagman

+0

Непонятно, как обратная связь относится к отправленному коду. Что происходит со смещением 816 из 'rtc :: MessageQueue :: Get'? Почему и когда эта функция называется? Из строк 'pthread', я предполагаю, что это происходит в одном из фоновых потоков. Можете ли вы сказать, что? –

ответ

1

После взглянуть на образцы PeerConnection, расположенных внутри исходного кода WebRTC, я всегда инициализировать 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; 
} 
+0

Почему вы вызываете 'release()' на peerConnectionFactory? – Phylliida