Skip to content

moq-ffi v0.3.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 00:18
· 2520 commits to main since this release
4025223

What's Changed

  • moq-net: runtime Timescale/Timestamp; container::Frame keeps source scale by @kixelated in #1473
  • js/net: time out SUBSCRIBE_OK to surface browser stream-limit hangs by @kixelated in #1525
  • moq-mux: replace anyhow with thiserror by @kixelated in #1495
  • Split OriginConsumer into cheap read handle and announcement cursor by @kixelated in #1434
  • moq-mux: catalog filter/target and Annex-B exporters by @kixelated in #1487
  • moq-net: linger upstream subscriptions across consumer churn (moq-lite) by @kixelated in #1514
  • moq-native: fix broadcast linger test broken by AnnounceConsumer split by @kixelated in #1534
  • lite-05: negotiate per-frame compression via SUBSCRIBE_OK (Rust + JS) by @kixelated in #1531
  • nix: format moq-relay module with flake-pinned nixfmt 1.2.0 by @kixelated in #1543
  • moq-rtc: WebRTC (WHIP/WHEP) gateway, both ingest and egress by @kixelated in #1528
  • moq-net: auto-create Origin on connect/accept, expose via Session by @kixelated in #1536
  • Ergonomic announced streams in Swift and Kotlin wrappers by @kixelated in #1554
  • moq-net + moq-relay: adopt @moq/qmux 0.1.1 cross-draft negotiation by @kixelated in #1527
  • moq-rs: close FFI parity gaps and smooth subscribe ergonomics by @kixelated in #1559
  • REANNOUNCE via duplicate ANNOUNCE; announced() returns (path, Announced) by @kixelated in #1530
  • Add duration-based skipping to the container jitter buffer by @kixelated in #1532
  • swift: split MoqFFI bindings from the Moq wrapper + Swift-native redesign by @kixelated in #1561
  • moq-ffi (Kotlin): split bindings from an independent ergonomic wrapper by @kixelated in #1562
  • go: split moq-go-ffi bindings from the ergonomic moq-go wrapper, add the wrapper by @kixelated in #1563
  • moq-net: make subscribe_track async, blocking on SUBSCRIBE_OK by @kixelated in #1540
  • moq-lite-05: add AnnounceOk message (responder origin + initial active count) by @kixelated in #1573
  • moq-net: split TrackConsumer into a track handle + TrackSubscriber by @kixelated in #1576
  • Add per-track timescale and frame timestamps to moq-lite by @kixelated in #1439
  • moq-native,relay: don't advertise the illegal qmux-00.moqt-18 pair by @kixelated in #1579
  • moq-net: add per-track cache age (SUBSCRIBE_OK), reconcile draft field order, port timescale to js/net by @kixelated in #1585
  • moq-lite-05: add Frame Start to FETCH by @kixelated in #1595
  • moq-net: accept impl Into<Option<Subscription>> for subscribe, drop subscribe_default by @kixelated in #1606
  • js: make @moq/watch component signals explicit inputs vs outputs by @kixelated in #1592
  • watch: stop audio/video downloads when muted, paused, or off-screen by @kixelated in #1588
  • moq-net: spawn a task per lite control stream by @kixelated in #1621
  • refactor(hang): drop unused non-media catalog fields on the Rust side by @kixelated in #1629
  • moq-net: reshape Track into TrackInfo + an async TrackConsumer handle by @kixelated in #1631
  • moq-lite-05: implement FETCH for past groups via TrackConsumer::fetch by @kixelated in #1601
  • moq-net: serve one subscription and N fetches concurrently per track by @kixelated in #1634
  • moq-net: make Group/Frame producers track-only constructible by @kixelated in #1636
  • moq-net: RAII broadcast announcements via OriginPublish; remove broadcast abort/close by @kixelated in #1640
  • feat(moq-json): JSON Merge Patch snapshot/delta helper; route hang catalog through it by @kixelated in #1637
  • moq-lite-05: add TRACK stream, drop SUBSCRIBE_OK/FETCH_OK by @kixelated in #1648
  • moq-wasm: browser/WASM bindings for moq-net (@moq/wasm) by @kixelated in #1673
  • moq-lite-05: negotiate by default; carry per-frame timestamp + duration on the wire by @kixelated in #1681
  • Add moq-hls: HLS / LL-HLS gateway for MoQ by @kixelated in #1626
  • feat(net): callable Time unit constructors + brand the Opus frameDuration knob by @kixelated in #1703
  • feat(moq-video): native per-platform H.264 codecs + zero-copy capture, drop ffmpeg by @kixelated in #1691
  • fix(libmoq): update tests for moq_origin_publish handle return by @kixelated in #1710
  • moq-net: tighten public API surface (coding module + Track*Pending aliases) by @kixelated in #1707
  • fix(moq-ffi): unblock deadlocking dynamic_track_request tests by @kixelated in #1712
  • feat(moq-video): native V4L2 capture, NVENC via dlopen, drop VAAPI + nokhwa(Linux) by @kixelated in #1704
  • feat(moq-video): native Windows Media Foundation capture, drop nokhwa by @kixelated in #1716
  • feat(js/net): insert tracks into a broadcast, with real fan-out by @kixelated in #1714
  • feat(moq-video): reintroduce VAAPI via discord/cros-codecs + NV12 surface upload by @kixelated in #1720
  • moq-net: revert origin builder/Session toward main's shape by @kixelated in #1713
  • docs(moq-cli): fix stale ffmpeg claim on capture feature by @kixelated in #1719
  • feat(moq-video): Windows D3D11 zero-copy GPU capture + hardware H.264 encoder by @kixelated in #1718
  • test(moq-video): cover the Windows hardware encoder by @kixelated in #1740
  • Merge main into dev by @kixelated in #1750
  • feat(moq-srt): SRT contribution ingest gateway by @kixelated in #1747
  • feat(moq-net)!: remove per-frame duration from Frame and the lite-05 wire by @kixelated in #1753
  • feat(moq-video): replace cros-codecs git dep with the published moq-vaapi crate by @kixelated in #1757
  • feat(moq-ffi)!: defer dynamic track accept so media tracks declare a timescale by @kixelated in #1761
  • feat(moq-net): add OriginDynamic for unannounced fallback broadcasts by @kixelated in #1772
  • refactor(moq-rtc): feature-gate the binary so the gateway is embeddable by @kixelated in #1776
  • feat(moq-net): request_broadcast returns Unroutable when no route exists by @kixelated in #1779
  • feat(go): harden ergonomic wrapper and unbreak just go check by @kixelated in #1784
  • moq-mux: decouple importers from the catalog, split byte-parsing into per-codec splitters, and make importers pure frame publishers by @kixelated in #1749
  • feat(moq-net): encode Hop ID as fixed-width 64-bit on lite-05 by @kixelated in #1788
  • Merge main into dev by @kixelated in #1800
  • fix(moq-video): request camera access before capture on macOS by @kixelated in #1803
  • feat(moq-mux): synthesize fMP4/CMAF init for AV1 video by @kixelated in #1804
  • Merge main into dev by @kixelated in #1814
  • chore: remove deprecated aliases and redundant catalog fields by @kixelated in #1794
  • feat(moq-rtc): public whip::accept for embedders to own routing+auth by @kixelated in #1823
  • feat(moq-rtmp): RTMP / enhanced-RTMP ingest gateway + E-RTMP codecs by @kixelated in #1824
  • feat(moq-rtc): H.265 + AV1 egress, unify NALU reshaping via moq-mux by @kixelated in #1827
  • feat(moq-rtmp): RTMP play mode (egress) by @kixelated in #1829
  • feat(moq-srt): serve broadcasts back out over SRT (m=request egress) by @kixelated in #1828
  • feat(moq-video): H.265 (VideoToolbox) encode by @kixelated in #1802
  • feat(moq-video,libmoq): native H.264 decode (drop ffmpeg dependency) by @kixelated in #1796
  • refactor(moq-video, moq-audio): make device capture async (fixes Ctrl+C shutdown hang) by @kixelated in #1807
  • feat(moq-video): NVENC H.265 encode + refresh README by @kixelated in #1840
  • feat(moq-video)!: make hardware encoders always-on (openh264 stays the software fallback) by @kixelated in #1819
  • moq-lite-05: sync wire with drafts HEAD (SETUP stream, broadcast epoch, drop cache hint, rename ANNOUNCE) by @kixelated in #1847
  • feat(moq-mux,moq-srt): PTS-exposing TS Export API + PCR-paced SRT egress by @kixelated in #1845
  • feat(moq-srt,moq-rtc): bring-your-own-auth Server/Request + whep::accept by @kixelated in #1851
  • Merge main into dev by @kixelated in #1848
  • feat(moq-video): H.264 hardware decode on Windows via Media Foundation by @kixelated in #1853
  • feat(moq-video): Windows screen capture via DXGI Desktop Duplication by @kixelated in #1855
  • feat(moq-video): H.265 decode + Media Foundation HEVC backend by @kixelated in #1854
  • refactor(moq-relay): composable web router (routes() + serve()) by @kixelated in #1856
  • feat(moq-video): opt-out nvenc/vaapi features (default-on) + correct libva docs by @kixelated in #1860
  • feat(moq-video): H.265 hardware decode on macOS (VideoToolbox) by @kixelated in #1859
  • feat(moq-hls): pause/resume export with discontinuity markers by @kixelated in #1862
  • feat(moq-msf): draft-01 support behind a version-agnostic snapshot API by @kixelated in #1834
  • feat(moq-rtc): single shared-UDP-port mux for WHIP/WHEP servers by @kixelated in #1864
  • fix(moq-rtmp): reap half-open connections with TCP keepalive by @kixelated in #1868
  • review(moq-srt): cleanups + production-readiness review by @kixelated in #1866
  • fix(moq-srt): re-anchor SRT egress pacing to the live edge (fixes tune-in stall) by @kixelated in #1865
  • moq-rtc production hardening: A/V sync, DELETE teardown, dual-stack ICE, VP9, NACK by @kixelated in #1869
  • fix(moq-net,moq-mux): don't block forever on an evicted/missing group by @kixelated in #1863
  • Merge main into dev by @kixelated in #1877
  • fix(moq-net): enforce MAX_FRAME_SIZE at the frame allocation chokepoint by @kixelated in #1881
  • fix(moq-mux): begin TS export at the first video keyframe by @kixelated in #1885
  • refactor(moq-net): make request_broadcast/subscribe/fetch_group infallible by @kixelated in #1890
  • feat(moq-native): default QUIC backend to noq instead of quinn by @kixelated in #1891
  • refactor(moq-net): broadcasts own tracks own groups own frames via inherited Arc by @kixelated in #1900
  • feat(moq-net): mandatory timestamps for moq-lite-05 by @kixelated in #1896
  • feat(moq-net): generalize stats Tier to an arbitrary label by @kixelated in #1906
  • feat(moq-net): two-phase accept exposing the SETUP request path (lite-05 + moq-transport 14-18) by @kixelated in #1910
  • revert(moq-net): encode Hop ID as a 62-bit varint again, not fixed-width 64-bit by @kixelated in #1911
  • [codex] remove moq-lite broadcast epoch by @kixelated in #1920
  • fix(smoke): update interop clients to the current dev APIs by @kixelated in #1952
  • Merge main into dev by @kixelated in #1950
  • refactor(moq-net): drop per-frame compression, restore Publisher Max Latency to TRACK_INFO (lite-05) by @kixelated in #1962
  • docs(moq-native): fix rustdoc links to quinn-gated items under default features by @kixelated in #1961
  • fix(moq-video): make NVENC encode correct on hardware (forced IDR, in-band param sets, pitched input) by @kixelated in #1997
  • Merge main into dev by @kixelated in #2013
  • fix(moq-video, moq-audio): non-contiguous VT output, blocking mic prompt, DXVA NV12 offset by @kixelated in #2034
  • [codex] fix moq-boy playback support probes by @kixelated in #2027
  • [codex] fix js group cache accounting by @kixelated in #2030
  • [codex] fix moq-net timestamp fallback on wasm by @kixelated in #2029
  • [codex] fix lite wire edge cases by @kixelated in #2033
  • [codex] fix dropped group fetch requests by @kixelated in #2028
  • refactor(moq-video): run the capture encoder on a dedicated thread by @kixelated in #2038
  • feat(bindings)!: announce rename, wrapper/doc/backpressure fixes, moq-ffi 0.3.0 by @kixelated in #2037
  • [codex] fix IETF object property KVP encoding by @kixelated in #2031
  • [codex] fix subscription preference merging by @kixelated in #2026
  • [codex] Align hang display aspect fields with WebCodecs by @kixelated in #2023
  • [codex] fix cargo deny config by @kixelated in #2041
  • refactor(moq-video): vendor NVENC fork in-tree as moq-nvenc by @kixelated in #2042
  • [codex] fix Swift and Kotlin packaging checks by @kixelated in #2045
  • [codex] fix JS catalog demo regressions by @kixelated in #2056
  • [codex] fix moq-rtmp server hardening by @kixelated in #2059
  • [codex] fix python connect TLS pinning by @kixelated in #2061
  • [codex] fix dev cli doc cleanups by @kixelated in #2053
  • [codex] fix MSF catalog root semantics by @kixelated in #2054
  • [codex] fix lite05 moq-net edge cases by @kixelated in #2058
  • [codex] harden moq mux edge cases by @kixelated in #2057
  • fix(gateways): reported findings across moq-gst/srt/rtc/hls (rebuilt on dev) by @kixelated in #2036
  • fix(moq-nvenc): repair vendored doc-tests after crate rename by @kixelated in #2071
  • refactor(moq-net): split flat type names into role modules by @kixelated in #2070
  • [codex] Add zero-copy frame bytes by @kixelated in #1921
  • feat(moq-mux): gate initial catalog publish until reserved tracks resolve by @kixelated in #2072
  • feat(moq-net): lite-05 QUIC datagram delivery by @kixelated in #2039
  • feat(signals): add Once (awaitable + observable), use it for Group.closed by @kixelated in #2080
  • [codex] Strip announced prefixes in JS by @kixelated in #2088
  • [codex] Mirror @moq/net role modules by @kixelated in #2091
  • feat(moq-net,js/net): finalize moq-lite-05 and fix FETCH framing by @kixelated in #2113
  • refactor(moq-net)!: frames as plain data + batched frame reads by @kixelated in #2116
  • feat(moq-net): require broadcast close() + propagate real errors on abrupt teardown (#2087) by @kixelated in #2108
  • refactor(js/net)!: PascalCase the role-module namespaces by @kixelated in #2120
  • feat: relative broadcast paths for cross-broadcast catalog renditions (incl. WHEP egress) by @kixelated in #1371
  • refactor(moq-net): close request_broadcast dedup gap like request_track by @kixelated in #2122
  • auto-detect catalog bitrate (metrics owned by the generic Rendition) by @kixelated in #2124
  • [codex] implement JS lite FETCH by @kixelated in #2032
  • refactor(moq-net)!: drop vestigial serde + delete the legacy serde feature by @kixelated in #2127
  • feat(moq-net): global LRU cache pool for group memory by @kixelated in #2110
  • feat(js/net): dedupe conn.consume() per path so repeat subscribes share one broadcast by @kixelated in #2123
  • feat(moq-mux,moq-ffi): catalog init from hints and configs by @kixelated in #2102
  • feat: moq-transcode, just-in-time transcoding for hang broadcasts (NVENC-capable) by @kixelated in #2140
  • feat(moq-video): NVDEC hardware decode, zero-copy NVDEC -> NVENC transcode by @kixelated in #2145
  • fix(moq-video): make decode Frame/Consumer Send on macOS by @kixelated in #2162
  • feat(moq-hls): fetch-on-demand HLS origin driven by the timeline track by @kixelated in #2141
  • refactor: carry moq-video decode timestamps as moq_net::Timestamp by @kixelated in #2146
  • feat(moq-ffi): expose group fetch API by @Qizot in #2142
  • fix(moq-net): reclaim closed dynamic-cache entries with amortized GC by @kixelated in #2138
  • go: catch up wrapper API by @kixelated in #2168
  • Add moq-ffi track info and update by @kixelated in #2177
  • moq-video: add NVDEC AV1 decode support by @kixelated in #2178
  • Update libmoq raw track C ABI by @kixelated in #2171
  • Add origin options and dynamic FFI by @kixelated in #2173
  • js/net: model subscription priority as an options object by @kixelated in #2167
  • Expose track datagrams through moq-ffi by @kixelated in #2175
  • feat(moq-net,js/net): moq-lite-06-wip announce ids (typed START/END/RESTART, opt-in) by @kixelated in #2160
  • Preserve raw frame timestamps by @kixelated in #2174
  • fix(js): don't latch the connection off after a Safari pagehide by @fperex in #2185
  • fix(publish,demo): align media constraints by @fperex in #2181
  • feat(net)!: expose the negotiated transport on Established by @fperex in #2192
  • moq-net + js/net: pre-merge API hardening for moq-lite-05 by @kixelated in #2170
  • fix(net): support WebTransport datagram API variants by @kixelated in #2198
  • feat(moq-transcode): decode once per source, GPU resize fanout, and a moq transcode verb by @kixelated in #2158
  • auth: forward the connection transport to the --auth-api by @kixelated in #2132
  • fix(net,watch): recover the viewer from a same-name republish by @kixelated in #2199
  • fix(moq-video): mark the macOS Surface Sync so moq-transcode compiles by @kixelated in #2225
  • go: pass timestamps to raw frame writes by @kixelated in #2230
  • refactor(net): remove implicit frame timestamp helpers by @kixelated in #2232
  • fix(net): align track ordering defaults by @kixelated in #2235
  • feat(swift,ffi)!: ergonomic Swift JSON wrappers; make snapshot mode explicit by @kixelated in #2236
  • feat(moq-net): let finish_at declare a future exclusive end group (#2219) by @kixelated in #2234
  • feat(moq-video): PipeWire screen capture on Linux by @kixelated in #2238
  • refactor(watch)!: shorten signal input and output groups by @kixelated in #2242
  • chore: refresh cargo-deny advisories by @kixelated in #2244
  • refactor(moq-native): type request transports by @kixelated in #2243
  • feat(moq-net): advertise session Role in the moq-lite-05 SETUP by @kixelated in #2201
  • feat(publish): prefer the codecs Safari actually hardware encodes by @fperex in #2211
  • feat(publish): measure the upload bitrate from encoder Stats by @kixelated in #2246
  • refactor(publish)!: composable Broadcast + per-rendition encoders by @kixelated in #2257
  • fix(publish): release per-subscription serve scopes instead of leaking them by @kixelated in #2260
  • fix(moq-native): default QUIC backend to quinn by @kixelated in #2285
  • refactor(watch)!: remove the MSE backend and inline the WebCodecs pipeline by @kixelated in #2288
  • feat(bindings): align portable API parity by @kixelated in #2287
  • feat(capture): macOS window/app/system-audio sources and device enumeration by @kixelated in #2293
  • feat(moq-video)!: adapt the encoder bitrate to the congestion-control estimate by @kixelated in #2303
  • chore: let release-plz own the moq-ffi version; drop AI marker from moq-nvenc by @kixelated in #2305
  • refactor(kio)!: delete Consumer write access, add role-less Shared for reverse queues by @kixelated in #2074
  • refactor(moq-net)!: remove Announced::Restart; a replacement is an unannounce/announce pair by @kixelated in #2307
  • fix(bindings)!: honor declared track ends, unify abort error codes, and dedupe libmoq's native link list by @kixelated in #2306
  • refactor(net)!: caller-driven sessions via a (Session, Driver) pair by @kixelated in #2302
  • feat(moq-net)!: unify the latency budget as latency_max by @kixelated in #2176
  • feat(moq-net): coalesce concurrent group fetches behind a shared Requests queue by @kixelated in #2328
  • fix(signals)!: narrow Setter.set, brand Computed/Once, drop get/next aliases by @kixelated in #2332
  • fix(token)!: align the Rust/JS token contract on sign/verify/authorize by @kixelated in #2329
  • fix(net)!: align js/net and the moq-lite draft on the exclusive SUBSCRIBE_END by @kixelated in #2333
  • docs: align media docs and priorities by @kixelated in #2336
  • refactor(js/net)!: close three js/net gaps vs rs/moq-net (frame payload naming, SETUP role, dead export) by @kixelated in #2337
  • refactor(js)!: finish the in/out component migration and converge closed/signal shapes by @kixelated in #2335
  • refactor(moq-net)!: fix Request::accept's lying doc + panic path and Session::closed's fake Result by @kixelated in #2334
  • refactor(hang)!: non_exhaustive catalog sections, shared container::track_info, hang draft catch-up by @kixelated in #2341
  • refactor(moq-msf)!: rename Catalog::to_string to to_json by @kixelated in #2346
  • refactor(moq-hls)!: replace the Authorizer callback with router middleware by @kixelated in #2340
  • refactor(audio)!: align the moq-audio capture/encode surface with moq-video by @kixelated in #2350
  • fix(bindings)!: converge py/swift/kt/go on one wrapper contract by @kixelated in #2345
  • refactor(moq-net)!: remove Subscriber::get_group; make the sync peek a test hook by @kixelated in #2339
  • refactor(moq-net)!: clamp the subscription latency budget once, in the aggregate by @kixelated in #2349
  • refactor(moq-native)!: pre-bump polish (docs, tls handle, setters, exports) by @kixelated in #2359
  • refactor(moq-net)!: expose a real stats module and make Role::Both unrepresentable by @kixelated in #2348
  • fix(test): update js-native smoke client to the renamed frame payload field by @kixelated in #2363
  • fix(net): log a non-empty error reason on Safari WebTransport failures by @kixelated in #2364
  • refactor(kio)!: rename Future to Pollable, return Closed from the async API by @kixelated in #2343
  • fix(libmoq)!: align the C ABI naming on announce/_finish and drop _ordered by @kixelated in #2344
  • refactor(moq-net)!: model Timestamp as an instant; drop panicking arithmetic operators by @kixelated in #2366
  • refactor(moq-net)!: rename Error::CacheFull to Lagged; document the App/Remote asymmetry by @kixelated in #2367
  • fix(moq-net): exclude dropped subscribers from the aggregate (#2351) by @kixelated in #2370
  • fix(publish): publish video files on Safari, warn that audio is dropped by @kixelated in #2369
  • fix(watch): render audio at the decoder's real sample rate by @kixelated in #2368
  • fix(watch): resume the AudioContext from a real user gesture (#2357) by @kixelated in #2372
  • fix(js/net): bump @moq/qmux to 0.3.0 to fix a post-close enqueue crash by @fperex in #2361
  • fix(bindings)!: unify moq-ffi shapes before the bump (#2315) by @kixelated in #2373
  • fix(net): tear down a shared upstream once its last subscriber leaves by @kixelated in #2371
  • refactor(net)!: drop moq-net's direct tokio dependency by @kixelated in #2377
  • feat(net)!: extract stats publishing into moq-stats with compressed tracks by @kixelated in #2380
  • net: migrate subscriptions transparently across connections by @kixelated in #2241
  • feat(moq-hls): Producer/Consumer cursors for recording a broadcast by @kixelated in #2389
  • fix(moq-hls): release retired renditions instead of force-closing them by @kixelated in #2394
  • fix(obs): port the source to moq_origin_request by @kixelated in #2347
  • fix(publish): align audio inputs to codec frames by @kixelated in #2397
  • refactor(net)!: route everything through create_broadcast, gate announce on Route.live by @kixelated in #2396
  • fix(signals): recognize abort-scoped effects by @kixelated in #2402
  • fix(demo): report live media download stats by @kixelated in #2403
  • build(deps): bump the bun group with 4 updates by @dependabot[bot] in #2406
  • build(deps-dev): bump ruff from 0.15.20 to 0.15.21 in the uv group by @dependabot[bot] in #2407
  • build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #2408
  • refactor(stats)!: remove internal tier defaults by @kixelated in #2411
  • build(deps): bump the cargo group with 2 updates by @dependabot[bot] in #2409
  • feat(net)!: accept an empty PATH and default it to "" across protocols by @kixelated in #2414
  • fix(publish): snap the capture rate to one the codec supports by @kixelated in #2415
  • fix(js/net): disable WebTransport on Safari by @kixelated in #2417
  • fix(net): lower WebTransport log level by @kixelated in #2418
  • feat(net): unannounce as soon as the last route detaches by @kixelated in #2419
  • feat(token): scope signing keys to publish/subscribe paths by @kixelated in #2416
  • fix(nix): keep moq-cli's cross-crate test fixture in the build source by @kixelated in #2422
  • test: compile doc examples across the workspace by @kixelated in #2421
  • refactor(mux)!: unseal catalog renditions and make timelines explicit/shareable by @kixelated in #2420
  • refactor!: pre-bump API polish across the release batch by @kixelated in #2423
  • refactor(mux): extract shared video-import catalog helper by @kixelated in #2425
  • feat(net): route by cumulative cost on lite-06 announcements by @kixelated in #2424
  • fix(moq-mux): emit per-frame fragments without waiting for a successor frame by @wrangelvid in #2426
  • refactor(stats)!: collect traffic counters in the model layer by @kixelated in #2427
  • fix(mux): emit timelines from the fMP4 CMAF passthrough importer by @kixelated in #2428
  • test(moq-net): cover the announce loop's demand/linger state machine by @kixelated in #2429
  • feat(stats): count datagrams in the model layer by @kixelated in #2430
  • fix(net): bump @moq/qmux to 0.3.1 for the WebSocket fallback crash by @kixelated in #2437
  • feat(moq-native): expose a congestion control knob for the quinn backend by @wrangelvid in #2432
  • fix(js/net): reconnect correctly after a peer closes the session by @kixelated in #2442
  • refactor(js/net)!: consolidate the connection estimates into one stats signal by @kixelated in #2441
  • refactor(mux): carry the TS service layer as opaque SI sections by @kixelated in #2440
  • refactor(js/net)!: split the pulled transport stats from the pushed PROBE ones by @kixelated in #2445
  • feat(moq-hls)!: expose a credential-aware serve surface for embedders by @kixelated in #2438
  • fix!: correct catalog, timeline, token, and teardown contracts found in API review by @kixelated in #2439
  • fix(js/signals): scope a stale spawn task to the run it belongs to by @kixelated in #2446
  • test(mux): cover the per-PID SI repetition interval by @kixelated in #2447
  • feat(js/net): add AbortSignal support to connect() by @wrangelvid in #2435
  • fix(moq-token): default missing key_ops to sign and verify by @wrangelvid in #2436
  • docs(js/signals): note that run() defers a stale child to the next teardown by @kixelated in #2450
  • chore: release by @moq-bot[bot] in #2449

New Contributors

Full Changelog: moq-ffi-v0.2.33...moq-ffi-v0.3.0