gpt4 book ai didi

javascript - WebRTC - 如何设置始终使用 TURN 服务器?

转载 作者:行者123 更新时间:2023-12-03 16:54:08 29 4
gpt4 key购买 nike

在标准规范中,它说您可以将 ENUM 值设置为“中继”:http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceServer

但是,您如何使用以下 Javascript 将枚举设置为“中继”?if (tmp.indexOf("typ relay ") >= 0) {在我的测试中从未发生过。我怎样才能强制它枚举“中继”?

或者

是BUG吗? https://code.google.com/p/webrtc/issues/detail?id=1179

任何想法。

function createPeerConnection() {
try {
// Create an RTCPeerConnection via the polyfill (adapter.js).
pc = new RTCPeerConnection(pcConfig, pcConstraints);
pc.onicecandidate = onIceCandidate;
console.log('Created RTCPeerConnnection with:\n' +
' config: \'' + JSON.stringify(pcConfig) + '\';\n' +
' constraints: \'' + JSON.stringify(pcConstraints) + '\'.');
} catch (e) {
console.log('Failed to create PeerConnection, exception: ' + e.message);
alert('Cannot create RTCPeerConnection object; \
WebRTC is not supported by this browser.');
return;
}
pc.onaddstream = onRemoteStreamAdded;
pc.onremovestream = onRemoteStreamRemoved;
pc.onsignalingstatechange = onSignalingStateChanged;
pc.oniceconnectionstatechange = onIceConnectionStateChanged;
}

function onIceCandidate(event) {
if (event.candidate) {
var tmp = event.candidate.candidate;
if (tmp.indexOf("typ relay ") >= 0) {
/////////////////////////////////////////// NEVER happens
sendMessage({type: 'candidate',
label: event.candidate.sdpMLineIndex,
id: event.candidate.sdpMid,
candidate: tmp});
noteIceCandidate("Local", iceCandidateType(tmp));

}
} else {
console.log('End of candidates.');
}
}

最佳答案

有一个 Chrome 扩展程序,WebRTC Network Limiter ,即通过更改 Chrome 的隐私设置来配置 WebRTC 的网络流量的路由方式。您可以强制流量通过 TURN,而无需进行任何 SDP 修改。

编辑 1

在扩展中提供此功能的目的是为担心其安全性的用户提供。您可以查看this关于 WebRTC 安全性的优秀帖子。与此扩展相同,也可以在 FF 中通过更改标志 media.peerconnection.ice.relay_only 来完成.这可以在 about:config 中找到。 .不知道其他两个,但我敢打赌他们确实有类似的东西。

另一方面,如果您正在分发一个应用程序并希望您的所有客户都通过 TURN,您将无法访问他们的浏览器,并且不能指望他们更改这些标志或安装任何扩展。在这种情况下,您将不得不破坏您的 SDP。您可以使用此代码

function onIceCandidate(event) {
if (event.candidate) {
var type = event.candidate.candidate.split(" ")[7];
if (type != "relay") {
trace("ICE - Created " + type + " candidate ignored: TURN only mode.");
return;
} else {
sendCandidateMessage(candidate);
trace("ICE - Sending " + type + " candidate.");
}
} else {
trace("ICE - End of candidate generation.");
}
}

该代码取自 discuss-webrtc列表。

如果你从来没有得到这些候选人,很可能是你的 TURN 服务器没有正确配置。您可以在 this 中检查您的 TURN 服务器页。不要忘记删除该演示中配置的现有 STUN 服务器。

编辑 2

更简单:设置 iceTransportPolicy: "relay"在您的 WebRtcPeer 配置中强制 TURN:
var options = {
localVideo: videoInput, //if you want to see what you are sharing
onicecandidate: onIceCandidate,
mediaConstraints: constraints,
sendSource: 'screen',
iceTransportPolicy: 'relay',
iceServers: [{ urls: 'turn:XX.XX.XX.XX', username:'user', credential:'pass' }]
}

webRtcPeerScreencast = kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv(options, function(error) {
if (error) return onError(error) //use whatever you use for handling errors

this.generateOffer(onOffer)
});

关于javascript - WebRTC - 如何设置始终使用 TURN 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22130311/

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