当它触发 RTCPeerConnection.createOffer() 时,我收到下一个错误:
DOMException
代码:11
列号:0
数据:空
文件名:“”
行号:0
消息:“当没有有效的收发器时,无法创建报价。”
名称:“InvalidStateError”
结果:2152923147
堆栈:“”
__proto__: DOMExceptionPrototype { name: Getter, message: Getter, INDEX_SIZE_ERR: 1, … } index.js:176:3
接下来是完整的代码片段(错误由以下行引发:pc.createOffer().then(...):
let pc = {};
let localStream = {};
const btnStart = document.querySelector("button[id='btnstart']");
let localVideoDisplay = document.getElementById('vOwn');
btnStart.addEventListener("click",(e)=>{
pc = new RTCPeerConnection();
pc.onicecandidate = (event)=>{
console.log(event);
}
/*
It captures local media
*/
navigator.mediaDevices.getUserMedia({ audio: 1, video: 1 }).then((stream)=>{
localStream = stream;
localVideoDisplay.srcObject = localStream;
}).catch((err)=>{
console.log(err);
});
/*
It creates sdpOffer
*/
pc.createOffer().then((rtcSession)=>{
console.log(rtcSession);
}).catch((error)=>{
console.log(error);
});
});
<button id="btnstart">Start</button>
<video id="vOwn" autoplay></video>
该代码在 Chrome(移动和桌面)和 Safari(移动 v11.3.1 和桌面 v11.0.2)上完美运行,我的下一个问题是:这是 Firefox 错误还是我做错了什么?
最佳答案
您在添加任何流或创建数据通道之前调用 pc.createOffer()
。
这通常不是您想要的。试试这个:
navigator.mediaDevices.getUserMedia({ audio: 1, video: 1 }).then((stream)=>{
localStream = stream;
localVideoDisplay.srcObject = localStream;
stream.getTracks().forEach((t) => pc.addTrack(t, stream));
return pc.createOffer()
})
.then((rtcSession)=>{
console.log(rtcSession);
}).catch((error)=>{
console.log(error);
});
关于javascript - 在 Firefox v60.0.2(WebRTC、Firefox)中创建 sdf 报价时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50892877/