这个项目中有很多代码。目前,我没有收到将远程流添加到RTCPeerConnection的回调。而不是在此时提供代码示例,而是仅验证自己是否正在使用有效的方法来建立连接。

  • node.js后端服务器管理websocket连接以促进对等方发现。服务器工作正常。
  • 当客户端请求对等页面时,它将在onload处理程序期间建立连接。
  • 在上载期间,客户端会打开服务器的Websocket,服务器会通过IP:PORT字符串记住客户端。
  • 客户端调用getUserMedia(),并在成功回调期间创建RTCPeerConnectioncreateOffer()。在回调过程中,localDescription设置开始了查找ICE候选对象的过程。
  • 收集完所有ICE候选对象后,客户端将向服务器注册,并将其本地描述,ICE候选对象等发送到服务器。
  • 服务器通知所有其他已连接的客户端新加入的客户端,并发送sdp对象和所有ICE候选对象。这使每个客户端都知道所有其他客户端的ICE候选对象和SDP对象。
  • 所有对等方都通过创建一个UI元素供用户单击以发起 call 来使用react。
  • 当用户单击UI元素时,将查找关联的远程对等方的信息,并将每个远程对等方的ICE候选者添加到对等方连接,将SDP对象添加为远程描述,并将邀请请求发送到服务器。
  • 服务器通知正在邀请的关联客户端。
  • 接收到通知的对等方然后查找发起 call 的对等方,并添加该对等方的所有ICE候选对象和远程描述。然后,它调用createAnswer()

  • 在这一点上,我的期望是WebRTC堆栈将启动基础 session 初始化,并且两个对等方都将获得addstream回调以连接视频。这是一个好方法吗?工作流是否必须以不同的顺序发生?

    WebRTC内部日志(感谢@Philipp Hancke)显示以下内容。即使我的代码在createAnswer之后调用setRemoteDescription()
    4/12/2015, 6:35:26 PM   setRemoteDescription
    4/12/2015, 6:35:26 PM   createAnswer
    4/12/2015, 6:35:26 PM   setRemoteDescriptionOnFailure
    4/12/2015, 6:35:26 PM   createAnswerOnFailure
    
    CreateAnswer can't be called before SetRemoteDescription.
    rtcPeer.conn.setRemoteDescription(new RTCSessionDescription(remotePeers[msgObj.peer].sdp));
    rtcPeer.conn.createAnswer(createOfferSuccess);
    

    最佳答案

    不使用细流冰将对 call 建立时间产生非常负面的影响,但这可能是一个问题。您可能要在步骤5中访问peerconnections .localDescription,以便发送包含所有候选者的报价。

    请注意,您无法在步骤8中与多个同伴共享报价。但这听起来并不像您打算这样做。实际上,您想在步骤8中调用createAnswer,然后在步骤9中将其发送给客户端(以及任何候选冰)。在步骤10中,您在调用方调用setRemoteDescription。

    这听起来与您所描述的内容略有不同,后者可能解释了为什么您没有远程流。确保在chrome:// webrtc-internals中检查createOffer,setLocalDescription,setRemoteDescription的顺序与在apprtc.appspot.com上看到的顺序相同-调用方不必调用createAnswer。

    08-07 06:54