Orbiscreen v0.29.0
Introduce WebTransport Annex-B web streaming with WebCodecs hardware decoding, one-frame VBV CBR rate control for low latency, reliable IDR and parameter set distribution with Reed-Solomon FEC for P-frame datagrams, robust Android client AU reordering and packet loss recovery, and bump the release matrix across all platforms.
Features
- WebTransport Annex-B and WebCodecs web client PR #80 by @sentinelt):
- Chromium opens WebTransport on
signaling_port + 2(wt_port) withserverCertificateHashesand decodes Annex-B access units withVideoDecoderonto a canvas. - P-frames ride QUIC datagrams (unreliable). Hello, ping/pong, and IDR stay on the control stream. The same port serves the UI over HTTPS; HTTP
/and/client/redirect there. Android keeps HTTP on:8788. - The self-signed certificate is stored in
$XDG_CONFIG_HOME/orbiscreen/wt-cert.pemandwt-key.pem(0o600, parent0o700) and reused across restarts (14-day WebTransport cap).
- Chromium opens WebTransport on
- Reed-Solomon FEC on P-frame datagrams PR #80 by @sentinelt):
- Systematic Cauchy RS over GF(256). Ladder: 1-3 fragments no FEC; 4-16 +2; 17-64 +3; 65+ +4. IDRs stay on the reliable stream.
- Reliable IDR and SPS/PPS PR #80 by @sentinelt):
- Keyframes (SPS/PPS prepended when missing) go on the WebTransport control stream and on TCP
GET /idrfor Android. A reliable IDR resets the datagram assembler so the next P-frame starts a new GOP.
- Keyframes (SPS/PPS prepended when missing) go on the WebTransport control stream and on TCP
- One-frame VBV/CPB rate control PR #80 by @sentinelt):
- Hardware and software H.264 encoders size the coded-picture buffer to one frame of the CBR target so a single IDR cannot occupy hundreds of milliseconds of wire time.
- Frame transport guide PR #80 by @sentinelt):
- Added comprehensive
docs/FRAME_TRANSPORT.mddocumenting I/P/IDR/GOP terminology, AU datagram/reliable stream partitioning, and hold-until-IDR packet loss recovery.
- Added comprehensive
Performance & Low Latency
- HTTP MPEG-TS (
GET /stream) keeps the encoder's infinite GOP: IDR on join, lag, and muxer failure, not every second. - IDR requests are debounced to 250 ms on HTTP, UDP, and WebTransport until a keyframe arrives.
- A failed UDP datagram no longer aborts the rest of that access unit; only
TooBigstops the fragment loop. - Early P-frames after a one-sequence hole are reordered instead of immediately requesting an IDR.
Bug Fixes
- Quinn datagram stability: Pinned
quinn-prototo 0.11.16 to prevent daemon aborts from dropped datagram double-subtraction. - Android mid-GOP packet retention: UDP
feedCodecdrains and retries full input buffers, holding until the next IDR instead of discarding mid-GOP P-frames. HTTP/ExoPlayer no longer drops late P-frames. - Connect IDR pacing: Connect IDR is sent after the video path is live so the initial keyframe is not lost during DPLPMTUD.
Changed
- Workspace & Packaging:
- Bumped Cargo workspace package version to
0.29.0. - Incremented Android client
versionCodeto103; updatedversionNameto"0.29.0". - Updated
tauri.conf.jsonversion to0.29.0. - Bumped PKGBUILD
pkgverto0.29.0. - Added
0.29.0-1release entry todebian/changeloganddata/orbiscreen-copr.spec. - Synchronized documentation badges across all architecture and specification guides.
- Bumped Cargo workspace package version to