Joiner 的 answer
既然我们已经完成了 ICE 候选人交换,那么让我们重新思考一下。
我们当时(第115页上的“ Joiner 管理 Initiator 的 Offer ”)是 Joiner 通过创建自己的 PeerConnection
对象来处理 Initiator 的 Offer 的时候。
如 图5-15 所示,完成此操作后,Joiner 首先将接收到的 SDP 与新实例化的 PeerConnection
相关联,然后立即调用 doAnswer()
JavaScript 函数。
图5-15 Joiner’s Answer to Initiator’s Offer
下面的代码片段突出显示了 Joiner 算法的这一特定部分:
// Receive message from the other peer via the signaling server
socket.on('message', function (message) {
console.log('Received message:', message);
if (message === 'got user media') {
...
} else if (message.type === 'offer') {
...
pc.setRemoteDescription(new RTCSessionDescription(message));
doAnswer();
} else if (message.type === 'answer' && isStarted) {
...
doAnswer()
函数基本上处理与接收到的 Offer 关联的 SDP Answer 的创建:
function doAnswer() {
console.log('Sending answer to peer.');
pc.createAnswer(setLocalAndSendMessage,onSignalingError, sdpConstraints);
}
与 createOffer()
方法类似,一旦浏览器使本地 SDP 可用, createAnswer()
调用将设置成功处理程序,该处理程序将被调用。 这种处理程序的作用是首先将浏览器提供的 SDP 设置为与 Joiner 的 PeerConnection
相关联的本地会话描述,然后通过信令服务器将此类描述发送给远程方:
function setLocalAndSendMessage(sessionDescription) {
pc.setLocalDescription(sessionDescription);
sendMessage(sessionDescription);
}
当启动器从服务器接收到 Joiner’s Answer 时,可以将其正确设置为与其本地 PeerConnection
对象关联的远程会话描述:
// Receive message from the other peer via the signaling server
socket.on('message', function (message) {
console.log('Received message:', message);
if (message === 'got user media') {
...
} else if (message.type === 'offer') {
...
} else if (message.type === 'answer' && isStarted) {
pc.setRemoteDescription(new RTCSessionDescription(message));
} else if (message.type === 'candidate' && isStarted) {
...
} else if (message === 'bye' && isStarted) {
...
}
});
当前内容版权归 Salvatore Loreto & Simon Pietro Romano 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Salvatore Loreto & Simon Pietro Romano .