Open iyeldinov opened 6 years ago
ONN twice issue can be fixed with a re-entrancy guard:
pc.onnegotiationneeded = async e => {
if (pc._negotiating == true) return;
pc._negotiating = true;
try {
return cb(e);
} finally {
pc._negotiating = false;
}
}
So the updated code from tutorial will look like (ah, and it is async/await instead of promises too :) )
async function handleNegotiationNeededEvent() {
if (myPeerConnection._negotiating == true) return;
log("*** Negotiation needed");
myPeerConnection._negotiating = true;
try {
log("---> Creating offer");
const offer = await myPeerConnection.createOffer();
log("---> Creating new description object to send to remote peer");
await myPeerConnection.setLocalDescription(offer);
log("---> Sending offer to remote peer");
sendToServer({
name: myUsername,
target: targetUsername,
type: "video-offer",
sdp: myPeerConnection.localDescription
});
} catch (e) {
reportError(e)
} finally {
myPeerConnection._negotiating = false;
}
}
Solved that error but now this one. Failed to execute 'addTrack' on 'RTCPeerConnection': A sender already exists for the track.
yes, when two addTrack() are used , two onnegotiationneeded events will be fired. Still dont know what to do now
I am having similar issue. Anyone able to figure this out. My scenarios:
Let me know if there is any solution for such solution. I am trying for last more than 1 week.
Thanks
sample tested in Chrome 68 - doesn't work without adapter:
with adapter:
but in FF works just fine.
I've figured out that Chrome fires
onnegotiationneeded
on each track added while FF fires it once. Firing twice results into sending offer twiceHow to workaround that issue, does anybody knows?