Javascript webrtc适用于所有浏览器,但不适用于firefox
比什么都重要!我已经检查了类似问题中的所有答案,这些答案既没有用处,又陈旧。 我曾尝试在firefox上使用webrtc,但没有成功!没有错误 此代码适用于除firefox以外的所有浏览器 这是我的密码Javascript webrtc适用于所有浏览器,但不适用于firefox,javascript,html,webrtc,Javascript,Html,Webrtc,比什么都重要!我已经检查了类似问题中的所有答案,这些答案既没有用处,又陈旧。 我曾尝试在firefox上使用webrtc,但没有成功!没有错误 此代码适用于除firefox以外的所有浏览器 这是我的密码 let configuration = { "iceServers":[{ 'url':'stun:stun.l.google.com:19302' }] }; io.on("signaling_message",(data)=&g
let configuration = {
"iceServers":[{
'url':'stun:stun.l.google.com:19302'
}]
};
io.on("signaling_message",(data)=>{
//displayMessage(data.message);
if(!rtcPeerConn){
startSignaling();
}
if(data.type!="user_here"){
let message = JSON.parse(data.message);
if(message.sdp){
rtcPeerConn.setRemoteDescription(new RTCSessionDescription(message.sdp),()=>{
if(rtcPeerConn.remoteDescription.type=="offer"){
rtcPeerConn.createAnswer(sendLocalDesc,logerror)
}
})
}else{
rtcPeerConn.addIceCandidate(new RTCIceCandidate(message.candidate));
}
}
})
function startSignaling(){
displayMessage("start signaling...");
rtcPeerConn = new RTCPeerConnection(configuration);
//send ice candidate to other peer
rtcPeerConn.onicecandidate = function(evt){
if(evt.candidate){
io.emit("signal",{"type":"ice candidate","message":JSON.stringify({'candidate':evt.candidate}),room:signal_room})
displayMessage("completed that ice candidate");
}
}
rtcPeerConn.onnegotiationneeded = function(){
displayMessage("on negotiationnneded");
rtcPeerConn.createOffer(sendLocalDesc,logerror);
}
rtcPeerConn.onaddstream = (evt,err)=>{
displayMessage("creating the other stream");
if(err){
displayMessage(err)
}
success2(evt.stream);
}
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
navigator.mediaDevices.getUserMedia({video:true,audio:true}).then(stream=>{
success(stream);
rtcPeerConn.addStream(stream);
}).catch(err=>{
logerror(err);
});
}
function sendLocalDesc(desc){
rtcPeerConn.setLocalDescription(desc,()=>{
displayMessage("set local description");
io.emit("signal",{type:"SDP",message:JSON.stringify({'sdp':rtcPeerConn.localDescription}),room:signal_room})
},logerror);
}
function success(stream){
if ("srcObject" in video) {
video.srcObject = stream;
} else {
// Avoid using this in new browsers, as it is going away.
video.src = window.URL.createObjectURL(stream);
}
video.play();
}
function success2(stream){
if ("srcObject" in video2) {
video2.srcObject = stream;
} else {
// Avoid using this in new browsers, as it is going away.
video2.src = window.URL.createObjectURL(stream);
}
video2.play();
}
我的代码有什么问题吗
另外一个问题,我可以在生产中使用谷歌StunIce服务器吗?它们可靠吗
编辑
firefox坚持使用这个脚本
rtcPeerConn.onicecandidate = function(evt){
if(evt.candidate){
io.emit("signal",{"type":"ice candidate","message":JSON.stringify({'candidate':evt.candidate}),room:signal_room})
displayMessage("completed that ice candidate");
}
}
它像一个循环一样不断显示此消息(ice候选者已完成)您应用了吗
谷歌stun服务器也不适合生产
因为如果您的客户端位于NAT或防火墙后面,则P2P连接是不可能的
若WebRTC中的P2P连接失败,则必须准备将服务器转到中继
例如,您可以使用谢谢,但导入适配器后我没有感觉到任何变化。你能检查(编辑)部分吗?firefox浏览器死机(rtcPeerConn.onicecandidate)可能是一个Clue我还有一个问题,如何使用适配器?我应该把它包括进去吗?我没有找到任何使用methodsadapter的文档。您需要做的是在脚本之前插入它。像这样:我想也许你的配置是错误的。您能在修复后进行测试吗?>>{iceServers:[{url:“stun:stun.l.google.com:19302”}]不是“url”,而是“url”。url属性已过时