Video streaming getlocalmedia成功时需要在ONNEGOTIATE后执行WebRTC处理顺序

Video streaming getlocalmedia成功时需要在ONNEGOTIATE后执行WebRTC处理顺序,video-streaming,webrtc,sdp,Video Streaming,Webrtc,Sdp,当我在启动会话之前(例如,在初始化时)获取usermedia时,让webrtc环境正常运行。但是,当我在会话启动和应答时获得usermedia时,我无法成功地将应答端媒体添加到会话中(即,启动端视频在应答端可见,但应答端视频在启动端不可见)。 我花了很多时间试图处理这件事,但都没有成功,我希望有人能澄清一点,说明处理需要进行谈判的事件的要点 情况如下: A端启动会话,获取用户媒体,一旦用户媒体可用并添加到对等连接,就会生成SDP报价并发送到远程端 B方收到报价,在屏幕上引发铃声类型事件,并在用户

当我在启动会话之前(例如,在初始化时)获取usermedia时,让webrtc环境正常运行。但是,当我在会话启动和应答时获得usermedia时,我无法成功地将应答端媒体添加到会话中(即,启动端视频在应答端可见,但应答端视频在启动端不可见)。 我花了很多时间试图处理这件事,但都没有成功,我希望有人能澄清一点,说明处理需要进行谈判的事件的要点

情况如下:

A端启动会话,获取用户媒体,一旦用户媒体可用并添加到对等连接,就会生成SDP报价并发送到远程端

B方收到报价,在屏幕上引发铃声类型事件,并在用户决定回答时请求usermedia。getusermedia的成功调用会将localdescription添加到对等连接中,并在某个点上生成OnGetIAtioneded事件

所有这些似乎都发生得很好(例如,在B侧-通过信令信道提供和候选,然后添加远程提供、远程流等)

但是,我不清楚应答方是否应该在重新协商后(即,在处理onnegotiationneeded事件时)生成SDP应答或SDP报价

另外,在发送回SDP应答之前,最好等待getusermedia返回成功,还是应该基于发起方的SDP提议发送SDP应答,而不等待本地usermedia,然后在需要的OnGotiationNeeded之后发送另一个SDP(例如,根据上一段的提议或应答)


在一个有点相关的问题上,PRAnswer实际使用的是什么?我在消息跟踪中没有看到这种情况。

在收到报价时,B方需要给出答案,而不是报价

边B在回答过程中不应该重新谈判,因为它已经在谈判的中间。换句话说,您不希望在回答时触发所需的
negotiationneeded

你说“谈判需要”在B方开火。这很糟糕

它开火可能有三个原因,如果没有代码,我无法判断是哪一个原因:

  • 在使用调用
    setRemoteDescription
    之前,您正在添加流 报价
  • 流中的视频和/或音频曲目数量超过了优惠中允许的数量
  • 您正在使用Chrome
  • 根据规范,
    negotiationneeded
    仅在
    信号状态
    “稳定”
    (即不协商)时触发,但在当时
    本地描述
    时不触发

    因此,请确保您正在做三件事:

  • 在添加
    getUserMedia
    流之前,请调用
    setRemoteDescription(offer)
  • 除非两个对等方添加相同数量的视频和/或音频曲目,否则请与
    createOffer
    一起使用
  • 在Chrome中,无论如何都要准备好忽略
    negotiationneeded
    ,因为它似乎有一个在
    “稳定”
    状态之外触发的bug,这种情况下会发生
  • 这在Firefox和Chrome45中都可以使用

    在Firefox中,您将看到:

    addStream in have-remote-offer
    checking
    connected
    
    addStream in have-remote-offer
    onnegotiationneeded fired in have-remote-offer
    checking
    connected
    
    而在Chrome 45中,您将看到:

    addStream in have-remote-offer
    checking
    connected
    
    addStream in have-remote-offer
    onnegotiationneeded fired in have-remote-offer
    checking
    connected
    
    因为虫子

    即使您的答案轨道较少,协商仍将完成,因此,如果您想快速回答,这是一种方法(但稍后添加媒体时,您需要重新协商)


    PRAnswer
    在任何浏览器中都不会实现。

    我认为在创建答案SDPThanks之前,您应该将本地流添加到PeerConnection中,非常感谢。事实上,我正在使用chrome,我确实看到addstream中有远程提供,然后启动onegotiationneeded。然后,假设我在没有获得B侧的本地媒体的情况下进行应答,连接将进入稳定状态,然后我在B侧获得本地媒体并想要更新会话,我假设在这种情况下,B方将发送一份新的报价(而不是第二份答复,因为状态稳定)。