Markdown Version | Session Recording
Session Date/Time: 21 Mar 2022 12:00
wish
Summary
The "wish" session primarily focused on updates to the WebRTC-HTTP Ingest Protocol (WIP) draft, particularly addressing out-of-order PATCH requests during ICE restarts using HTTP ETags. An extensive discussion followed regarding the clarity of the draft's language, error handling specifics, and the semantics of ETags. The session also included a presentation of implementation experience with both a WIP client (using GStreamer) and server (using Janus), highlighting current capabilities, limitations, and potential use cases. The chairs expressed the intent to move the draft to Working Group Last Call (WGLC) soon after addressing the identified issues.
Key Discussion Points
- WIP Draft Updates (Presenter: Sergio Garcia Murillo)
- Minor Change: Renamed
urn:ietf:params:wishtourn:ietf:params:ietf:wish. - Major Change (ETag for ICE Restarts): Addressed handling out-of-order
PATCHrequests for ICE candidates when an ICE restart is pending.- HTTP
ETagsare now associated with each ICE session. ETagis an opaque server-generated value (e.g., counter, UUID,ice-ufrag).- The
ETagvalue must be returned in201 Createdresponses (initialPOST) and200 OKresponses toPATCHrequests that trigger an ICE restart. It must change with each new ICE session. PATCHrequests for trickle ICE candidates must contain anIf-Matchheader with the last knownETagvalue. Servers must reject out-of-order requests with412 Precondition FailedifETagsdo not match.PATCHrequests for ICE restarts must containIf-Match: *(wildcard) to indicate the restart should happen regardless of the currentETag.- Clients must buffer ICE candidates gathered after sending an ICE restart until the updated
ETagis received in the response.
- HTTP
- Minor Change: Renamed
- Discussion on WIP Draft Changes
- **Server Determination of Restart/Candidate (Julius) **: Clarified that servers determine if an SDP fragment signifies a restart by checking the
ufrag/pwdvalues (as per WebRTC RFCs), not solely theIf-Matchheader. This should be made explicit in the draft. - Concurrent ICE Restarts (Jonathan Lennox): Suggested adding a requirement to prevent multiple ICE restarts from being in flight simultaneously to avoid confusion, especially in flapping network conditions. The behavior when a previous restart is not completed (e.g., due to timeout or network failure) needs clarification.
- ETag Change Semantics (Jonathan Lennox): Requested clarification in the draft that the
ETagchanges for aPATCHrequest only if it triggers an ICE restart, not if it's for sending new ICE candidates. - Normative Language for ICE Consent (Julius): Questioned the consistency of normative language for ICE consent monitoring. Suggested either explicitly stating the normative behavior (even if repeating other RFCs) or only referring to external documents, rather than the current halfway approach.
- ETag Semantics & RFC 7232 (Adam Roach): Recommended that the draft point to RFC 7232 for
ETagsemantics rather than defining them internally. Noted thatETagsshould likely change even when trickle candidates arrive as they modify the resource. - Error Handling (Julius vs. Sergio): Julius advocated for more precise guidance on HTTP error codes for various failure scenarios (e.g., invalid SDP, unparseable candidates, resource not found) to aid implementers. Sergio argued for following standard HTTP responses for general errors. Consensus was reached that specific server behaviors for application-level issues (e.g., ignoring unparseable candidates) should be documented.
- **Server Determination of Restart/Candidate (Julius) **: Clarified that servers determine if an SDP fragment signifies a restart by checking the
- WIP Implementation Experience (Presenter: Lorenzo Miniero)
- Server Implementation: Used a Node.js wrapper in front of a Janus WebRTC Server (SFU plugin) to translate WIP API calls to Janus's JSON API. The server is open source.
- Client Implementation: Used GStreamer with
webrtcbinfor a native WIP client, suitable for broadcasting tools like OBS. The client is open source. - Features: Supports trickle ICE (advanced or via
Linkheader), authorization tokens,DELETErequests, non-trickle mode, and forced TURN usage. Audio/video pipelines are customizable via GStreamer format. - Limitations:
- GStreamer's
webrtcbincurrently lacks support for ICE restarts. webrtcbindoes not allow adding STUN/TURN servers after an offer has been generated, limiting the use of theLinkheader inPOSTresponses for this purpose.- Client currently only supports Linux.
- GStreamer's
- Use Cases: Demonstrated live streaming from OBS via NDI to the WIP client and then to Janus. Highlighted its utility for prototyping new WebRTC features (e.g., custom pixel formats, H.264 profiles) with browsers.
- Future Work / Next Steps for WIP Extensions:
- Discussion on how to handle extensions for new functionalities like metadata, multi-language support, and subtitles.
- Current
wishcharter is tightly scoped. - Chairs will need to consult with ADs on whether to extend the working group charter or dispatch new work to other WGs (e.g.,
avtcore). - Participants with ideas for extensions are encouraged to start drafting new documents.
Decisions and Action Items
- Sergio Garcia Murillo:
- Clear up all outstanding issues and pull requests on the GitHub repository.
- Incorporate editorial changes discussed during the session, including:
- Clarifying
ETagchange behavior forPATCHrequests (only changes for ICE restart, not trickle candidates). - Adding explicit normative language about how servers determine if an SDP fragment is an ICE restart (checking
ufrag/pwd). - Documenting specific server behaviors for handling unexpected or unparseable candidates.
- Clarifying
- Respond to Adam Roach's PR regarding
ETagsemantics and RFC 7232.
- Adam Roach:
- Open a Pull Request (PR) to clarify
ETagsemantics, pointing to RFC 7232, and specifyETagbehavior when trickle candidates arrive (if it changes the resource, theETagshould likely change).
- Open a Pull Request (PR) to clarify
- Chairs (Sean Turner, Niels ten Oever):
- Monitor the GitHub repository to ensure outstanding issues and editorial changes are addressed promptly.
- Initiate Working Group Last Call (WGLC) for the
wishdraft as soon as possible after the agreed-upon changes are implemented. - Take the item to discuss with the Area Directors (ADs) about the process for handling future extensions to
wish(e.g., metadata, subtitles, multi-language support), given the current charter's scope.
Next Steps
- WIP Draft: Focus on incorporating editorial feedback and resolving open GitHub items to prepare for Working Group Last Call.
- WIP Extensions: Interested parties should consider drafting proposals for new functionalities (metadata, subtitles, etc.) to inform discussions with ADs on the working group's future scope.