setRemoteDescription之后永远不会调用onIceCandidate-WebRTC-Android

时间:2019-10-17 09:43:39

标签: android webrtc

我遵循一些流程,他们解释了如何在webrtc中进行连接。但是我被封锁了: 得到sdpOffer之后,我想调用setRemoteDescrisption(),并且有一个onIceCandidate回调。但是我没有这个回调。 如果您需要,我可以显示一部分代码。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

首先,我对Android上的WebRTC知之甚少,但我想它会与Web API非常相似。我在下面的流程中使用了标准js。

关于onicecandidate-trigger:

onicecandidate处理程序称为设置本地描述时see MDN onicecandidateevent。 您需要设置本地描述以开始集冰过程。原因之一是,将收集的冰块候选者添加到您的本地描述中,如果您没有将其添加到本地描述中,则将不起作用。

关于您的流量(也许要检查):

关于处理报价/交换的过程,请尝试这样做(将A和B用作具有单独的RTCPeerConnection-Objects pcA和pcB的对等方),请检查您的流程在某处是否不同:

  1. 首先,您应该为A和B的入冰候选者设置处理程序,例如signaller.on('ice', candidate => pc.addIceCandidate(candidate))
  2. 然后,您应该为A和B注册跟踪处理程序,例如pcA.ontrack = track => ... (put it as src of your video or whatever)
  3. 将MediaStreamTracks添加到连接pcA.addTrack(aTrack)

(从A的一面开始...)

  1. A通过致电offer = await pcA.createOffer()
  2. 产生要约
  3. A将生成的报价设置为本地描述await pcA.setLocalDescription(offer)
  4. A通过信令通道signaller.sendTo('B','offer', offer)发送生成的要约,现在您的集冰过程开始了
  5. A通过onicecandidate处理程序接收生成的候选。 pcA.onicecandidate = e => signaller.sendTo('B','ice', e.candidate)

(现在我们跳到B对事物的看法)

  1. B收到要约并将其设置为signaller.on('offer', async offer => { await pcB.setRemoteDescription(offer); // and the following steps 8 to 12 follow here })
  2. B创建一个sdp答案answer = await pcB.createAnswer()
  3. B将答案设置为本地描述await pcB.setLocalDescription(answer)
  4. 现在,B的集冰过程是并行开始的,应该像在7中一样进行处理。
  5. B将答案发送给A signaller.sendTo('A','answer', answer)

(返回A)

  1. A收到答案signaller.on('answer', async answer => await pcA.setRemoteDescription(answer); });
  2. 现在,呼叫应已完成,应冰候选者进行交换,并且作为冰状态的信号应为stableconnected

如果这行得通,请看看处理眩光this is a good source