首页 > 解决方案 > Safari 不发送 ice 候选人

问题描述

不要在 safari 中工作示例

https://github.com/Kurento/kurento-tutorial-node/tree/master/kurento-one2many-call

在 chrome 中,一切都很好。

在查看模式下,Safary 不会发送候选冰。演示者模式没问题

=====================

更新

在前面 (index.js)

始终执行 onOfferViewer 事件

onIceCandidate – 从未执行过

从 Front 到节点的连接

var ws = new WebSocket('wss://' + location.host + '/one2many');

在 KMS 上,Turn 不会打开,但会配置 Stun。我可以从 Safari 进行广播,但我无法观看

深入了解 kurento utils

在 WebRtcPeer 初始化之前选择了 2 个 Sturm 服务器

iceServers:数组(2) 0 {用户名:未定义,凭据:未定义,url: “stun:stun.l.google.com:19302”,urls:[“stun:stun.l.google.com:19302”]}

1 {用户名:未定义,凭据:未定义,网址: “stun:stun.voipbuster.com”,网址:[“stun:stun.voipbuster.com”]}

RTCPeerConnection 创建
后 Process answer 执行后

我认为下一步必须在函数 addEventListener

pc.addEventListener('icecandidate', function (event) {…} 

在 Chrome 中的 addEventListener 函数中会执行一个回调,但对于 Safari 则永远不会。

我可以假设候选人在订阅发生之前就来了,但是没有证据,我不明白为什么演示者工作得很好。

细节

我开始在 Safari 中以演示者模式进行广播

Safari 版本- 13604.3.5 (MacOs - 11.0.1)

Safari 选项

旧 api - 已启用

冰限制 - 禁用

Bower 的依赖项

"dependencies": { 
    "adapter.js": "v0.2.9", 
    "bootstrap": "~3.3.0", 
    "ekko-lightbox": "~3.3.0", 
    "demo-console": "1.5.1", 
    "kurento-utils": "master" 
 } 

package.json 结构

{ 
  "name": "kurento-one2many-call", 
  "version": "6.7.3-dev", 
  "private": true, 
  "scripts": { 
    "postinstall": "cd static && bower install" 
  }, 
  "dependencies": { 
    "express": "~4.12.4", 
    "minimist": "^1.1.1", 
    "ws": "~1.0.1", 
    "kurento-client": "Kurento/kurento-client-js" 
  }, 
  "devDependencies": { 
    "bower": "^1.4.1" 
  } 
} 

Safari 日志的输出

Safari 日志的输出

[Log] Browser does not appear to be WebRTC-capable (adapter.js, line 34) 

[Debug] constraints: {"offerToReceiveAudio":true,"offerToReceiveVideo":true} (kurento-utils.js, line 268) 

[Debug] Created SDP offer (kurento-utils.js, line 270) 

[Debug] Local description set – "v=0 

↵o=- 5811275597248577793 2 IN IP4 127.0.0.1 

↵s=- 

↵t=0 0 

↵a=msid-semantic: WMS 

↵" (kurento-utils.js, line 275) 

"v=0 

o=- 5811275597248577793 2 IN IP4 127.0.0.1 

s=- 

t=0 0 

a=msid-semantic: WMS 

" 

[Log] Senging message: {"id":"viewer","sdpOffer":"v=0\r\no=- 5811275597248577793 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=msid-semantic: WMS\r\n"} (index.js, line 70) 

[Info] Received message: {"id":"viewerResponse","response":"accepted","sdpAnswer":"v=0\r\no=- 3748169328 3748169328 IN IP4 0.0.0.0\r\ns=Kurento Media Server\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=msid-semantic: WMS\r\n"} (index.js, line 70) 

[Debug] SDP answer received, setting remote description (kurento-utils.js, line 320)  

[Debug] Remote stream: – undefined (kurento-utils.js, line 294)

节点如何连接到 KMS

var argv = minimist(process.argv.slice(2), {
    default: { 
        as_uri: 'https://localhost:8443/',      
        ws_uri: 'ws://37.228.89.170:8888/kurento' 
    }
}); 

标签: safariwebrtckurento

解决方案


两种选择:

  1. 仅限 Safari 12 - 需要在 Safari 设置中启用实验性功能“启用 MDNS Ice Candidates”,高级、实验性功能
  2. Safari 11 - 您必须调用getUserMedia({video: true, audio: true}),并让用户接受对话框以允许在您的页面上播放视频和音频。即使您不想使用视频或音频,这也会导致 safari 在协商期间发送 ice-candidates

推荐阅读