下面的 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 选择不实施 https://w3c.github.io/webrtc-pc/#legacy-configuration-extensions
中描述的“传统”offerToReceive* 选项您可以移植您的代码以使用 addTransceiver 或使用 webrtc-adapter 包来填充它。