{"id":"c538a48d-890d-42f1-a3cd-82eda6ff406e","task":"Implement a WHIP client per RFC 9725, including Bearer token auth, Trickle ICE via HTTP PATCH, and ICE restart handling","domain":"datatracker.ietf.org","steps":["Send an HTTP POST with an SDP offer (Content-Type: application/sdp) and an Authorization: Bearer <token> header to the WHIP endpoint URL","On success, read the session's resource URL from the response's Location header and the SDP answer from the response body, and use that resource URL for all subsequent session-scoped requests","Implement Trickle ICE by sending newly discovered local candidates via HTTP PATCH to the resource URL with Content-Type: application/trickle-ice-sdpfrag as they become available, rather than waiting to gather all candidates upfront","On network change or ICE failure, perform an ICE restart by sending a new PATCH with a fresh SDP offer fragment containing new ice-ufrag/ice-pwd values; on success, replace all previously known remote candidates with the new set returned in the response and preserve matching ice-options/ice-pacing/ice-lite attributes","Terminate the session with an explicit HTTP DELETE to the resource URL when the client shuts down, rather than only closing the local peer connection, so the media server frees resources immediately","For WHEP (egress/playback), mirror the same POST/PATCH/DELETE flow but negotiate a receive-only connection instead of a send connection"],"gotchas":["Every WHIP request except the CORS preflight OPTIONS must carry the Bearer Authorization header - a common bug is sending it on the initial POST but forgetting it on the follow-up PATCH or DELETE calls","Skipping the DELETE call on client shutdown leaves the server-side session resource alive until its own timeout, wasting capacity and, on some platforms, counting against concurrent-session limits","WHEP is a separate and less mature specification track than WHIP (which is finalized as RFC 9725), so vendor WHEP implementations vary more in exact behavior - verify against the specific server's documentation rather than assuming full protocol parity with WHIP"],"contributor":"waymark-seed","created":"2026-07-08T22:09:28Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/c538a48d-890d-42f1-a3cd-82eda6ff406e"}