Skip to content

Add streaming: browser clients for volumetric adaptive streaming - #49

Merged
ryanmkim merged 3 commits into
mainfrom
streaming-clients
Sep 18, 2026
Merged

ryanmkim merged 3 commits into
mainfrom
streaming-clients

Conversation

@ryanmkim

@ryanmkim ryanmkim commented Sep 18, 2026

Copy link
Copy Markdown
Collaborator

Adds open4d/streaming, a sibling of open4d/reconstruction: that holds the
methods, this holds the clients that deliver and play them.

Five systems on one page, side by side — our adaptive textured-mesh system,
ViVo and NAVA point clouds, Vega splats, NeVo panels. Three of the five adapt;
the chooser says which, because a fixed-quality player and an adaptive one look
identical on a fast link.

What is in it

  • system/ClientCore — platform-free streaming logic (segment loop, MCKP ABR,
    bandwidth estimation, metrics) behind a seven-capability ClientPlatform
    contract, so a Node client and a browser client run the same code. A
    desktop/browser difference is then a real difference in the system under
    test, not a difference between two hand-written clients.
  • system/WebClient — five pages, the chooser, and a WebSocket↔TCP bridge for
    the point-cloud baselines, which serve over raw TCP a browser cannot open.
  • system/Server — publishes the per-segment bitrate ladder and serves media.
  • tile_ladder.py — lets ViVo and NAVA serve prepared Draco tiles without the
    RGB-D source they were derived from. It refuses to fabricate the capture rig
    it does not have, rather than returning plausible calibration.

Scope and caveats

Not runnable from this repo alone. The ladder solver, the baseline servers
and the encoded corpora stay in the research repo; streaming/README.md says
so up front rather than letting someone discover it by running it.

Vendored, not a submodule, matching how reconstruction/ holds its methods.
PROVENANCE records the source commit and scripts/check-sync.sh reports
whether the two copies have drifted (exit 1 on drift, 2 if it cannot check).

Tests: 292 of 294 pass standalone. The other two cross-check the JavaScript
decoders against the authoritative Python implementations byte for byte — the
check you lose if the two are allowed to drift — so they need the research repo
on PYTHONPATH. The exact invocation is in the README.

This branch is scoped to the streaming addition only: 87 files, all under
open4d/streaming/. It is cut from main, not from streaming-abstractions,
which carries 49 unrelated commits.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

A sibling of reconstruction/, holding the client side rather than the methods.
system/ClientCore is platform-free streaming logic — segment loop, MCKP ABR,
bandwidth estimator — shared by a Node and a browser client behind one
ClientPlatform contract. system/WebClient has five pages: our adaptive mesh
system, ViVo and NAVA point clouds over a WebSocket-to-TCP bridge, Vega splats
and NeVo panels.

Copied from the 4DVideoStreaming research repo, so the ladder solver, the
baseline servers and the corpora still live there; see the README.
Drop system/Client, which held nothing but a captured viewpoint fixture, and
move that under tests/fixtures; test_camera_pose now looks in both places so
one file works here and in the research repo. Remove the unreferenced
manifest.mpd.json that rode along with the server directory.

Rewrite the README around getting the demo up and adding a method, instead of
describing the layout.
@ryanmkim
ryanmkim merged commit b3cfe44 into main Sep 18, 2026
13 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant