gpt4 book ai didi

html - 与 Chrome 不同,Firefox 的 WebRTC SDP 对象(本地描述)不包含 DataChannel 信息?

转载 作者:太空狗 更新时间:2023-10-29 16:42:09 33 4
gpt4 key购买 nike

为了我自己,我正在逐步测试 WebRTC 程序。

我为无服务器 WebRTC 编写了一些测试站点。

http://webrtcdevelop.appspot.com/

其实使用的是google的STUN服务器,但没有部署信令服务器。

session 描述协议(protocol) (SDP) 是手动交换的,即浏览器窗口之间的 CopyPaste。

enter image description here

enter image description here

enter image description here enter image description here

到目前为止,这是我用代码得到的结果:

'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>');
}
  • 火狐(26.0):RtpDataChannelsonopen 事件成功触发,但 send 失败。

  • Chrome(31.0):RtpDataChannelsonopen事件触发成功,send也成功。

Chrome 的一个 SDP 对象如下:


{“sdp”:...... cname:L5dftYw3P3clhLve
\r\
na=ssrc:2410443476 msid:ch1 ch1
\r\
na=ssrc:2410443476 mslabel:ch1
\r\
na=ssrc:2410443476 标签:ch1
\r\n","类型":"报价"}

代码中定义的ch1信息;

 ch = peerCon.createDataChannel(
'ch1',
{
reliable: false
});

正确捆绑。

但是Firefox的SDP对象(本地描述)根本不包含DataChannel,而且SDP比Chrome短得多,捆绑的信息也少。

我错过了什么?

我猜想 send 在 DataChannel 上失败的原因可能是由于 firefox 在 SDP 对象中缺少信息。

我该如何解决这个问题?我调查了各种工作库的来源,例如 peerJS、easyRTC、simpleWebRTC,但无法找出原因。

感谢任何阅读建议。

最佳答案

[还没有答案]

我把这个留在这里只是想帮助你。我不是 WebRTC 开发人员。但是,我很好奇,这对我来说非常新鲜和有趣。

Have you seen this

DataChannels

Supported in Firefox today, you can use DataChannels to send peer-to-peerinformation during an audio/video call. There iscurrently a bug that requires developers to set up some sort ofaudio/video stream (even a “fake” one) in order to initiate aDataChannel, but we will soon be fixing that.

此外,i found this bug hook ,女巫似乎是相关的。

最后一点,您的 adapter.js 版本 与 code.google 上提供的版本不同。而且..很多。您的 webrtcDetectedVersion 部分缺失。

https://code.google.com/p/webrtc/source/browse/stable/samples/js/base/adapter.js

试试看,回来告诉我好消息。 ?


在上次更新之后,我在点击“获取答案”后在控制台中看到了这一行

Object { name="INVALID_STATE", message="Cannot set remote offer instate HAVE_LOCAL_OFFER", exposedProps={...}, more...}

但这可能是无用的信息,因为我复制粘贴了相同的浏览器来回答。

.. 女巫让我注意到您正在使用 jQuery v1.7.1 jquery.com。

尝试更新 jQuery(在我杀死一只小猫之前),同时,尝试确保使用所有更新版本的脚本。


糟糕,快速阅读此文后:https://developer.mozilla.org/en-US/docs/Web/Guide/API/WebRTC/WebRTC_basics然后比较您的 javascript,我看不到 SHIM。

Shims

As you can imagine, with such an early API, you must use the browserprefixes and shim it to a common variable.

> 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 - 与 Chrome 不同,Firefox 的 WebRTC SDP 对象(本地描述)不包含 DataChannel 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622748/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com