# live-conformance/sdp-caps — capability attributes in a WHEP offer Vectors for [`extensions/live-ingest.md`](../../extensions/live-ingest.md) §9.5: the WAI capabilities a WHEP player advertises per media section of its offer, as SDP media capabilities (RFC 6871) under capability negotiation (RFC 5939), read back by an egress gateway, and the rendition the gateway forwards. `vectors.json` holds: - `reads`: an offer, and for each media section the WAI capabilities it advertises, in order, each with the configuration, media capability and payload type that carry it; or the reason the reader does not take it (a refusal, or for `caps_unsupported` an offer a gateway answers as if it carried no capability attributes). Every reason of §9.5 appears. - `picks`: an offer, a section, the renditions the owner publishes (layer and capability), the grant's `max_layer` and the layer the resource names; and what the gateway forwards, with the answer's `a=acfg` line, or the floor. - `writes`: an offer and a sink's capabilities in its order; the offer with them written into it, byte for byte, and the capabilities left out; or why nothing is written. **Provenance.** Every offer is synthetic, written in the form a WebRTC endpoint writes; none is a capture. The cases were computed by `sdp_caps_verify.py` and are held by the reference. ## Equivalence The reference is `wai::sdp_caps` (`wai-rs/src/sdp_caps.rs`), whose tests replay every case, write every order of the video capabilities and read it back, and hold §9.5's table and the reasons of §9.5 and §14 to the module. The egress gateway, `joule-moq-ingest`, compiles the same file as its own module, and its test run replays these tests, and so every case, through that copy. The second implementation, written from §9.5's text and the grammars of RFC 5939 and RFC 6871 and sharing no code with `wai-rs`: ``` python3 -I live-conformance/sdp_caps_verify.py live-conformance/sdp-caps ``` It recomputes every case and requires every mutated copy of the corpus to fail.