live-ingest §9.5: a WAI-aware WHEP player writes, per media section of its offer, the WAI capabilities its sink dispatches, in its dispatch order, as SDP media capabilities (RFC 6871) under capability negotiation (RFC 5939): a=csup:med-v0, then for each capability §5.1 carries over WebRTC (wai.video.avc, vp8, vp9, av1, wai.audio.opus.packet) that the section offers, an a=rmcap, an a=mfcap of its fmtp, and an a=pcfg whose number gives the order. The egress gateway reads them back, refuses with 422 an offer whose capability attributes do not parse or do not hold together (caps_malformed, caps_number_reused, caps_config_reused, caps_unknown_capability, caps_payload_type, caps_option_missing, caps_unsupported, caps_too_many; §9.5 and §14), forwards for each section the rendition the first advertised capability names at or below the grant's max_layer, answered with a=acfg, and the floor where nothing advertised is published. §17 records that joule-moq-ingest does not read them yet. wai::sdp_caps: read, Offer::advertised, pick and Pick::acfg, write. Its tests replay live-conformance/sdp-caps/vectors.json (offers read and refused with every reason, picks, offers written byte for byte and read back), write and read back every order of the video capabilities, and hold §9.5's table and reasons and §14's to the module. live-conformance/sdp_caps_verify.py, written from §9.5 and the RFCs' grammars and sharing no code with wai-rs, recomputes every case and requires every mutated copy to fail. Co-Authored-By: Claude Opus 5.5 <[email protected]>
21 lines
1.4 KiB
Shell
21 lines
1.4 KiB
Shell
# step: SDP capability attributes · wai-rs sdp_caps and sdp_caps_verify.py
|
|
# order: 471
|
|
# paths: wai/extensions/live-ingest.md
|
|
# independent: sdp-caps live python3 -I live-conformance/sdp_caps_verify.py live-conformance/sdp-caps
|
|
#
|
|
# SDP capability attributes in a WHEP offer (extensions/live-ingest.md §9.5): the reference
|
|
# module's tests (live-conformance/sdp-caps/vectors.json replayed: every offer read or refused
|
|
# with its reason, every pick with its a=acfg line, every offer written byte for byte and read
|
|
# back as the capabilities written, in order; every order of the video capabilities written
|
|
# and read back; the grammar's edges; and §9.5's table and reasons, and §14's, held to the
|
|
# module); and, in the step of every independent verifier, the corpus's second
|
|
# implementation, sdp_caps_verify.py, written from §9.5's text and the grammars of RFC 5939
|
|
# and RFC 6871 and sharing no code with wai-rs, which reads §9.5's table and reasons,
|
|
# recomputes every case and requires every mutated copy of the corpus to fail; standard
|
|
# library only, run isolated (-I).
|
|
#
|
|
# The paths this step brings to the workflow's trigger, and why:
|
|
# wai/extensions/live-ingest.md: sdp_caps::tests and sdp_caps_verify.py read §9.5's table and
|
|
# reasons and §14's reasons.
|
|
set -euo pipefail
|
|
(cd wai-rs && cargo test --no-default-features --features "$WAI_FEATURES" --lib sdp_caps::)
|