事件回调未在Mozilla Firefox中触发

时间:2015-01-19 14:27:31

标签: javascript firefox javascript-events callback webrtc

我正在使用WebRTC创建音频会议的示例应用程序。我想要做的是创建一个RTCpeerconnection对象并传递它从调用者收到的远程描述。一旦设置了远程描述,然后为对等连接对象触发'onaddstream'事件,我们可以将远程描述中接收的流设置为某些audio / vedio控件,如下面的示例代码所示。

function call() {        
    chatHub.server.connect('receiver');        
    pc2 = new RTCPeerConnection(null, pcConstraints);
    pc2.onicecandidate = iceCallback2;
    pc2.onaddstream = gotRemoteStream; 
}
function gotDescription1(desc) { 
    var dessc = new RTCSessionDescription({ type: 'offer', sdp: desc });    
    pc2.setRemoteDescription(dessc);
}
function gotRemoteStream(e) { 
    //attaching the stream to UI controls
    audio2 = attachMediaStream(audio2, e.stream);
    audio2.play();  
    pc2.createAnswer(gotDescription2, onCreateSessionDescriptionError,sdpConstraints);
    callButton.disabled = true;
    hangupButton.disabled = false;
}
function gotDescription2(desc) {
    pc2.setLocalDescription(desc);      
}
function iceCallback2(event) {
    //---foo----
}

从示例代码流程开始清楚,从调用方法开始,调用方法设置PeerConnection对象并设置其事件callback.then gotDescription1由某些代码元素调用,现在这是我们设置remoteDescription的地方,它应该在内部触发gotRemoteStream。

除了Firefox之外,所有这些在主流浏览器中都能正常工作,对象设置了远程描述,但没有getStream的回调。

检查这个可能的解释。

https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#Initializing_the_call

感谢

1 个答案:

答案 0 :(得分:1)

关于onaddstream的spec说:

  

只要远程对等方添加MediaStream,就会调用它。这只会因setRemoteDescription而触发。 Onnaddstream在setRemoteDescription之后尽可能早地发生。此回调不会等待通过SDP协商接受或拒绝给定的媒体流。

在协商完成之前,Firefox目前不会onaddstream;见Bug 1122306

在任何情况下,在您执行SetLocalDescription()之前,媒体不应该流动,所以只是让它不能让您接受。