OperationError in addIceCandidate from stop() and rollback
Categories
(Core :: WebRTC: Signaling, defect, P3)
Tracking
()
Tracking | Status | |
---|---|---|
firefox68 | --- | affected |
People
(Reporter: jib, Assigned: bwc)
Details
Attachments
(3 files)
If an answerer stops a transceiver before all its ICE candidates have come in, what should happen?
STRs:
- Open https://jsfiddle.net/jib1/k3butq5p/7/
- Check ☐ Both noise
- Quickly uncheck ☑ Both noise
Expected result:
No error
Actual result:
4125 OperationError: Cannot set ICE candidate for level=1 mid=1: No such transceiver.
4126 OperationError: Cannot set ICE candidate for level=1 mid=1: No such transceiver.
4135 OperationError: Cannot set ICE candidate for level=1 mid=1: No such transceiver.
4136 OperationError: Cannot set ICE candidate for level=1 mid=1: No such transceiver.
4136 OperationError: Cannot set ICE candidate for level=1 mid=1: No such transceiver.
I'm not sure whether this is to spec or not, but as a JS user, it seems unreasonably difficult to detect and suppress this failure situation.
It seems to me addIceCandidate() could and should merely silently discard these candidates without error. WDYT?
Assignee | ||
Comment 1•6 years ago
|
||
That seems reasonable.
Reporter | ||
Comment 2•6 years ago
|
||
I've filed https://github.com/w3c/webrtc-pc/issues/2164
Reporter | ||
Comment 3•6 years ago
|
||
The spec issue in comment 2 has been merged, so we should be good to go with fixing this.
Assignee | ||
Updated•6 years ago
|
Assignee | ||
Comment 4•6 years ago
|
||
Assignee | ||
Comment 5•6 years ago
|
||
Depends on D39409
Assignee | ||
Comment 6•6 years ago
|
||
Depends on D39410
Assignee | ||
Comment 7•6 years ago
|
||
Assignee | ||
Comment 8•6 years ago
|
||
Try looks good.
Assignee | ||
Comment 9•6 years ago
|
||
So, what's the upshot with the latest spec discussion? It sounds like we aren't going to be able to change the way we handle transceiver mids like we want. Will we need to have some internal slots that remember the old mid?
Reporter | ||
Comment 10•6 years ago
•
|
||
For stop()
, I think w3c/webrtc-pc#2196' "If ... stopped, resolve p with undefined" solves it, since JSEP says not to clear the mid
until an m-line is recycled, which is much later. I don't think recycling can interfere with ICE, because
- On the answerer side, calling
stop()
no longer sets [[Stopped]] in the spec, so I see no way to recycle the m-line back in"stable"
already. - On the offerer side, calling
stop()
similarly cannot cause recycling to happen until after a full cycle, I believe.
For rollback, unless I missed something, I don't think our plans to keep mids past recycling helped any. Silencing "rolled-back candidates", would need some [[RolledBackCandidates]] internal slot for sure I think.
But since mid
s aren't necessarily unique—they can come over the signaling wire after all—I think a candidate's mid would need to be in that internal slot and not exist in any non-stopped transceiver before we could skip it. That, or try to add it first and only silence failures. Thoughts?
Lastly, this feels a bit similar to the "impolite peer ignoring an offer outright" problem, except in that case we have zero shot at fixing it without some new ignoreRemoteDescription(offer)
method.
Assignee | ||
Comment 12•6 years ago
|
||
No, bug 1591199 has been eating all my time.
Updated•3 years ago
|
Updated•6 months ago
|
Description
•