Some checks failed
wai-app and Create / wai-app · does this change touch it (push) Successful in 16s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 32s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 24s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 35s
wai-audit collector and player integration / does this change touch it (push) Successful in 10s
wai-ledger service / does this change touch it (push) Successful in 15s
wai-fleet service / does this change touch it (push) Successful in 15s
WAI operation catalogue / does this change touch it (push) Successful in 16s
wai-quantum for JavaScript / does this change touch it (push) Successful in 9s
wai-sink-swift native sink package / does this change touch it (push) Successful in 20s
WAI Studio / does this change touch it (push) Successful in 19s
wai-sink-android native sink library / does this change touch it (push) Successful in 20s
wai-quantum studio and desktop / does this change touch it (push) Successful in 19s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (push) Has been cancelled
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
wai-fleet service / service · linux (push) Has been cancelled
wai-fleet service / service · macos (push) Has been cancelled
wai-ledger service / service · linux (push) Has been cancelled
wai-ledger service / service · macos (push) Has been cancelled
wai-quantum for JavaScript / javascript · linux (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (push) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
wai release binaries build on Windows / the seven release binaries · windows (push) Successful in 16m38s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 10s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 2m52s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 8m2s
live-ingest §9.5 (b19e078cc) in the gateway. The WHEP handler reads the offer's capability
attributes with wai::sdp_caps and, per media kind, forwards the rendition sdp_caps::pick gives:
the first advertised capability the owner publishes at or below the grant's max_layer. The
section is narrowed to that configuration's payload type before the WebRTC stack answers it,
so the answer is the configuration as if it were the actual one (RFC 5939 §3.6.2), and the
configuration's a=acfg goes into that section. Where nothing advertised is published, the
floor, the layer the resource names. An offer with no capability attributes is answered byte
for byte as before, and its session record is unchanged.
caps_unsupported is no longer a refusal: such an offer is answered as if it carried no
capability attributes, as RFC 5939 §3.3.2 has a recipient proceed that does not support a
required extension, with a=csup:med-v0 at each unsupported creq's level (§3.6.2). §9.5 and §14
say so; the other seven reasons are refused, 422, before anything is held. The choice goes
into the session's signed record (detail.caps) and a log line, and the session's subscriber
time is counted under the highest layer it forwards. §17 says the gateway implements §9.5.
One implementation: the gateway compiles wai-rs's src/sdp_caps.rs as its own module by
#[path], as wai-verify compiles wai-rs's integer sources, instead of depending on wai-rs. With
default features off and no feature, that dependency would still bring wai's build script
(cbindgen with syn, writing the tracked include/wai.h on every gateway build), wai's staticlib
and cdylib, about 29 000 lines of ungated modules, and serde_json's preserve_order and
raw_value, unified into every crate of the joule-code workspace built beside the gateway: the
reason joule-moq-room and joule-moq-remote are workspaces of their own. sdp_caps uses std
alone. Its tests come with it: tests.rs is named by #[path] and reads live-ingest.md beside
the file, so the gateway's test run replays live-conformance/sdp-caps/ through its copy. No
lockfile changes.
Tests: whep.rs's unit tests (the first-dispatch rendition and its answer, the grant's bound,
an offer without attributes byte for byte, the floor, caps_unsupported at each level, the
refusals), sdp.rs's for the narrowing and the added lines; tests/whep_caps.rs over HTTP: an
Enhanced RTMP publisher's AV1 layer 0 and H.264 layer 1 and Opus, six WHEP players by their
offers, each answer, each player's codec and frames, and each record. joule-code-conformance.yml
runs them in its joule-moq-ingest job, and its triggers gain the module and the corpus.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
23 lines
1.8 KiB
Markdown
23 lines
1.8 KiB
Markdown
### The WHEP gateway forwards each player the rendition its sink dispatches first
|
|
|
|
- **live-ingest §9.5**: `joule-moq-ingest` now reads a WHEP offer's capability attributes and
|
|
forwards, per media kind, the owner's rendition the first advertised capability names at or
|
|
below the grant's `max_layer`, answering that configuration as if it were the actual one:
|
|
`a=acfg` in its section and its payload type as the `m=` line's only format. Where nothing
|
|
advertised is published it forwards the floor, the layer the resource names. An offer with no
|
|
capability attributes is answered as before, byte for byte the WebRTC stack's answer, and its
|
|
session record is unchanged.
|
|
- **`caps_unsupported` is no longer a refusal**: an offer that asks for what this revision does
|
|
not negotiate (a required option other than `cap-v0` and `med-v0`, `sescap`, `lcfg`) is
|
|
answered as if it carried no capability attributes, as RFC 5939 §3.3.2 has a recipient
|
|
proceed that does not support a required extension, with `a=csup:med-v0` at the level of
|
|
each such `creq` (RFC 5939 §3.6.2). The other seven reasons still refuse, `422`; §14 lists
|
|
`caps_unsupported` apart, as a reason kept in the record.
|
|
- **The session record** keeps the choice under `detail.caps`: per kind read, what the section
|
|
advertised, in order, and the layer forwarded, with the capability and its `acfg` line or the
|
|
floor; or `not_negotiated`. The session's subscriber time is counted under the highest layer
|
|
it forwards.
|
|
- **One implementation**: the gateway compiles `wai::sdp_caps` from its source file
|
|
(`#[path]`), so it runs WAI's reference reader and pick, and its test run replays
|
|
`live-conformance/sdp-caps/` through that copy. The module's tests read §9.5 and §14 from
|
|
beside the file, so the same tests run in both crates.
|