我正在逐步测试WebRTC过程。
我为无服务器的WebRTC编写了一些测试站点。
http://webrtcdevelop.appspot.com/
实际上,使用了Google的STUN服务器,但未部署任何信令服务器。
session 描述协议(protocol)(SDP)可以通过浏览器窗口之间的CopyPaste手动进行手动交换。
到目前为止,这是我在代码中得到的结果:
'use strict';
var peerCon;
var ch;
$(document)
.ready(function()
{
init();
$('#remotebtn2')
.attr("disabled", "");
$('#localbtn')
.click(function()
{
offerCreate();
$('#localbtn')
.attr("disabled", "");
$('#remotebtn')
.attr("disabled", "");
$('#remotebtn2')
.removeAttr("disabled");
});
$('#remotebtn')
.click(function()
{
answerCreate(
new RTCSessionDescription(JSON.parse($('#remote')
.val())));
$('#localbtn')
.attr("disabled", "");
$('#remotebtn')
.attr("disabled", "");
$('#remotebtn')
.attr("disabled", "");
});
$('#remotebtn2')
.click(function()
{
answerGet(
new RTCSessionDescription(JSON.parse($('#remote')
.val())));
$('#remotebtn2')
.attr("disabled", "");
});
$('#msgbtn')
.click(function()
{
msgSend($('#msg')
.val());
});
});
var init = function()
{
//offer------
peerCon =
new RTCPeerConnection(
{
"iceServers": [
{
"url": "stun:stun.l.google.com:19302"
}]
},
{
"optional": []
});
var localDescriptionOut = function()
{
console.log(JSON.stringify(peerCon.localDescription));
$('#local')
.text(JSON.stringify(peerCon.localDescription));
};
peerCon.onicecandidate = function(e)
{
console.log(e);
if (e.candidate === null)
{
console.log('candidate empty!');
localDescriptionOut();
}
};
ch = peerCon.createDataChannel(
'ch1',
{
reliable: true
});
ch.onopen = function()
{
dlog('ch.onopen');
};
ch.onmessage = function(e)
{
dlog(e.data);
};
ch.onclose = function(e)
{
dlog('closed');
};
ch.onerror = function(e)
{
dlog('error');
};
};
var msgSend = function(msg)
{
ch.send(msg);
}
var offerCreate = function()
{
peerCon
.createOffer(function(description)
{
peerCon
.setLocalDescription(description, function()
{
//wait for complete of peerCon.onicecandidate
}, error);
}, error);
};
var answerCreate = function(descreption)
{
peerCon
.setRemoteDescription(descreption, function()
{
peerCon
.createAnswer(
function(description)
{
peerCon
.setLocalDescription(description, function()
{
//wait for complete of peerCon.onicecandidate
}, error);
}, error);
}, error);
};
var answerGet = function(description)
{
peerCon.setRemoteDescription(description, function()
{ //
console.log(JSON.stringify(description));
dlog('local-remote-setDescriptions complete!');
}, error);
};
var error = function(e)
{
console.log(e);
};
var dlog = function(msg)
{
var content = $('#onmsg')
.html();
$('#onmsg')
.html(content + msg + '<br>');
}
RtpDataChannels
onopen
事件已成功触发,但send
失败。 RtpDataChannels
onopen
事件已成功触发,并且send
也成功。 Chrome的SDP对象如下:
{"sdp":".................. cname:L5dftYw3P3clhLve\r\na=ssrc:2410443476 msid:ch1 ch1\r\na=ssrc:2410443476 mslabel:ch1\r\na=ssrc:2410443476 label:ch1\r\n","type":"offer"}
代码中定义的 ch1 信息;
ch = peerCon.createDataChannel(
'ch1',
{
reliable: false
});
已正确捆绑。
但是,Firefox的SDP对象(本地描述)根本不包含DataChannel,而且,SDP比Chrome短得多,并且捆绑的信息更少。
我想念什么?
可能是因为Firefox缺少SDP对象中的信息,所以我想在DataChannel上
send
失败的原因。我该如何解决?
我调查了各种工作库的源代码,例如peerJS,easyRTC,simpleWebRTC,但找不到原因。
任何建议和阅读建议表示赞赏。
最佳答案
[还没有答案]
我将其留在这里只是为了帮助您。我不是WebRTC开发人员。但是,令我好奇的是,这对我来说是相当新的和非常有趣的。
Have you seen this?
此外,i found this bug hook似乎与巫婆有关。
最后一点,您的adapter.js版本与code.google上提供的版本不同。和..很多。您缺少webrtcDetectedVersion部分。
https://code.google.com/p/webrtc/source/browse/stable/samples/js/base/adapter.js
试试看,再给我好消息。 ?
上次更新后,点击“获取答案”后,我在控制台中显示了这一行
但这可能是无用的信息,我将其粘贴粘贴到相同的浏览器选项中进行回答。
..女巫让我注意到您正在使用jQuery v1.7.1 jquery.com。
尝试更新jQuery(在杀死小猫之前),与此同时,请尝试确保使用所有更新版本的脚本。
Woups,快速阅读以下内容:https://developer.mozilla.org/en-US/docs/Web/Guide/API/WebRTC/WebRTC_basics然后比较您的JavaScript,我看不到SHIM。
> var PeerConnection = window.mozRTCPeerConnection ||
> window.webkitRTCPeerConnection; var IceCandidate =
> window.mozRTCIceCandidate || window.RTCIceCandidate; var
> SessionDescription = window.mozRTCSessionDescription ||
> window.RTCSessionDescription; navigator.getUserMedia =
> navigator.getUserMedia || navigator.mozGetUserMedia ||
> navigator.webkitGetUserMedia;
关于html - Firefox的WebRTC SDP对象(本地描述)不像Chrome那样包含DataChannel信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20622748/