我目前正在尝试使用带有 Ajax 的 WebRTC 作为信令方法创建一个简单的视频聊天服务。
根据另一位 Stack Overflow 用户的建议,为了确保我正确理解标准 WebRTC 应用程序的流程,我首先创建了一个简单的 WebRTC 视频聊天服务,在该服务中我将创建的报价或答案以及 ICE 候选人打印到屏幕,然后手动将该信息复制并粘贴到另一个客户端窗口的文本区域中以处理所有内容。这样做后,我能够成功地弹出两个视频。
在让它正常工作后,我决定尝试使用 Ajax 作为信号方法。但是,我现在似乎无法让它工作。
在我当前的实现中,每次创建 offer/answer 或 ICE 候选信息时,我都会立即创建一个新的 Ajax 对象,用于将该信息(在对其执行 JSON.stringify 方法之后)添加到 DB 表中。两个客户端都在不断地轮询该数据库表,从另一个客户端搜索新信息。
我一直在向控制台回显很多信息,据我所知,一个有效的报价总是从一个客户发送到另一个客户,但在收到该报价后,成功将其设置为远程描述,并创建一个答案,我为设置“应答者”的本地描述所做的任何尝试都失败了。
是否有任何特殊原因导致这种情况发生?这是我的代码片段:
var i,
len;
for (i = 0, len = responseData.length; i < len; i += 1) {
message = JSON.parse(responseData[i]);
if (message.type === 'offer') {
makeAnswer(message);
}
// Code omitted,
}
...
makeAnswer = function (offer) {
pc.setRemoteDescription(new RTCSessionDescription(offer), function () {
pc.createAnswer(function (desc) {
// An answer is always properly generated here.
pc.setLocalDescription(desc, function () {
// This success callback function is never executed.
setPayload(JSON.stringify(pc.localDescription));
}, function () {
// I always end up here.
});
});
});
};
本质上,我会遍历从数据库中检索到的所有数据(有时会同时收集一个报价和大量候选信息),如果消息的类型属性是“报价”,我调用 makeAnswer 函数,并且从那里,我将远程描述设置为收到的报价,创建一个答案,并尝试将答案设置为本地描述,但在最后一步总是失败。
如果有人可以就为什么会发生这种情况提供任何建议,我将不胜感激。
非常感谢。