WebRTC Safari:没有发射就没有接收(更准确地说没有 ICE 候选回调)

问题描述 投票:0回答:1

下面的 JS fiddle 显示如果没有添加本地视频轨道,Safari 不想接收视频流。更准确地说,ICE 候选人回调永远不会发生。

https://jsfiddle.net/2r5mocfz/

  • 使用 Chrome:点击“没有本地摄像头”,您将收到带有警报消息的 ICE 候选人回调。

  • 使用 Safari:点击“没有本地摄像头”,您将 NOT 获得 ICE 候选回调。只有当您点击“使用本地摄像头”并接受使用您的本地摄像头时,您才会得到它。

javascript代码是:

function handleICECandidateEvent(event) {
    alert("ICE callback");
    console.log(event);
}

async function start_(arg) {
    alert("Starting " + arg);
    let peerConnection = new RTCPeerConnection({iceServers:[{urls: 'stun:stun1.l.google.com:19302'}]});
    peerConnection.onicecandidate = handleICECandidateEvent;
  if (arg) {
        const s = await navigator.mediaDevices.getUserMedia({video:true});
        s.getTracks().forEach(track => {peerConnection.addTrack(track, s);});
  }
    const offer = await peerConnection.createOffer({offerToReceiveAudio: true, offerToReceiveVideo: true});
    await peerConnection.setLocalDescription(offer);
}

有什么解决方法吗?我想在 Safari 上接收 WebRTC 视频流,而无需涉及本地摄像头及其权限请求?

safari webrtc mobile-safari
1个回答
0
投票

Safari 选择不实施 https://w3c.github.io/webrtc-pc/#legacy-configuration-extensions

中描述的“传统”offerToReceive* 选项

您可以移植您的代码以使用 addTransceiver 或使用 webrtc-adapter 包来填充它。

© www.soinside.com 2019 - 2024. All rights reserved.