gpt4 book ai didi

google-chrome - RTCPeerConnection 媒体流在 firefox 中工作但在 chrome 中不工作

转载 作者:行者123 更新时间:2023-12-02 01:45:11 27 4
gpt4 key购买 nike

为了让问题尽可能简单,我在 chrome 扩展中创建了一个媒体流,如下所示:

var pc = new RTCPeerConnection(null);
chrome.desktopCapture.chooseDesktopMedia(['screen', 'window'], null, function(streamId) {
var constraints = {
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: streamId
}
}
},
success = function(stream) {
pc.addStream(stream);
pc.createOffer(function(offer) {
pc.setLocalDescription(offer, function() {
send('make_offer', name, offer);
}, printError);
}, printError);
};
getUserMedia(constraints, success, printError);
});

目前,我的报价由访问浏览器页面的同行接收。这看起来或多或少像这样(m 是一个带有报价的消息对象):

var pc = new RTCPeerConnection(null);
pc.onaddstream = function(e) {
var video = document.getElementById('video');
video.src = URL.createObjectURL(e.stream);
};
pc.setRemoteDescription(new RTCSessionDescription(m.value), function() {
pc.createAnswer(function(answer) {
pc.setLocalDescription(answer, function() {
send('make_answer', m.from, answer);
}, printError);
}, printError);
}, printError);

我已经这样做了,无论有没有冰服务器,当我使用它们时看起来像这样:

var iceServers = {
iceServers: [
{url: 'stun:stun.l.google.com:19302'}
]
};

现在,对等点在 Firefox 中完美地接收和显示流。完全没有问题。但它在 Chrome 中不起作用。以下是来自 chrome://webrtc-internals 的一些精选数据:连接到 Firefox:

"ssrc_3309930214_send-transportId": {
"startTime": "2014-09-30T01:41:11.525Z",
"endTime": "2014-09-30T01:41:21.606Z",
"values": "[\"Channel-video-1\",\"Channel-video-1\",\"Channel-video-1\"]"
},
"ssrc_3309930214_send-packetsLost": {
"startTime": "2014-09-30T01:41:11.525Z",
"endTime": "2014-09-30T01:41:21.606Z",
"values": "[0,0,0,0,0,0,0]"
},

连接到 chrome:

"ssrc_1684026093_send-transportId": {
"startTime": "2014-09-30T01:41:57.310Z",
"endTime": "2014-09-30T01:42:00.313Z",
"values": "[\"Channel-audio-1\",\"Channel-audio-1\",\"Channel-audio-1\",\"Channel-audio-1\"]"
},
"ssrc_1684026093_send-packetsLost": {
"startTime": "2014-09-30T01:41:57.310Z",
"endTime": "2014-09-30T01:42:00.313Z",
"values": "[-1,-1,-1,-1]" // what is causing this??
},

这些看起来很重要,但我不确定具体的含义。我有更多数据,但我不确定到底什么是重要的。主要思想是,数据会发送到 firefox,但不会发送到 chrome,尽管我可以看到没有发生异常。如果我在 Chrome Canary(最新)中加载对等页面,则会发生另一个可疑数据:

Failed to load resource: net::ERR_CACHE_MISS

这是一个控制台错误,我不知道它来自哪里。它发生在应答从对等端发送回主机(chrome 扩展)之后。

信号通过 wss://完成,测试节点托管在 https://我不确定从这里到哪里去。

更新:根据回答和评论,我为 onicecandidate 添加了一个处理程序:

pc.onicecandidate = function(e) {
console.log('This is the ice candidate.');
console.log(e);
if(!e.candidate) return console.warn('no candidate!');
send('got_ice_candidate', name, e.candidate);
};

我还使用视频在浏览器之间设置了等效的对等连接:

var constraints = {
audio: false,
video: true
};
getUserMedia(constraints, success, printError);

从 Firefox 到 Chrome 都可以正常工作,反之亦然,所以问题可能是特定于 chrome 扩展的...成功案例与推广案例在聚冰方式上存在差异:

  • 浏览器之间完全没有冰。有一个事件,e.candidate 是 null
  • 从扩展程序到浏览器,有很多onicecandidate事件。他们并不都同意。所以也许 chrome 扩展混淆了 STUN 服务器?我不知道。

感谢您的回答,希望您能提供更多见解。

最佳答案

你能在两侧添加处理冰候选吗?

pc.onicecandidate = function(e){ send('ice_candidate', e.target) }

在收到这条“消息”的另一边做

pc.addIceCandidate(new RTCIceCandidate(message));

即使在交换了提议/答案之后,Chrome 也会发送 ice candidates,而 firefox 似乎不会这样做。

关于google-chrome - RTCPeerConnection 媒体流在 firefox 中工作但在 chrome 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111693/

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