camera-stream-orbbec
Standalone Orbbec DCW2 ingest extension. It isolates the legacy Orbbec SDK and
its NumPy ABI from the main camera-stream server:
| Component | Environment |
|---|---|
| DCW2 extension | Python 3.10 or 3.11, pyorbbecsdk v1, NumPy 1.26 |
| camera-stream server | Python 3.10+, independently resolved main-project dependencies |
| Transport | ZeroMQ DEALER -> server ROUTER ingest endpoint |
⚡ Run with uvx
The PyPI wheel bundles the matching Linux Orbbec v1 native runtime. No compiler, SDK installation, or persistent virtual environment is required:
uvx camera-stream server --config /absolute/path/to/server.yaml
uvx --python 3.11 camera-stream-orbbec --download-template
# Edit ./config.yaml: server address, serial, profiles, and alignment.
uvx --python 3.11 camera-stream-orbbec --config ./config.yaml
Supported release wheels are Linux x86_64 with glibc 2.28 or newer and CPython
3.10/3.11. Passing --python 3.11 keeps the legacy SDK ABI explicit even when
the host's default Python is newer. Verify the bundled SDK without opening a
camera:
uvx --python 3.11 camera-stream-orbbec --doctor
The plugin publishes <camera>/color and, when enabled,
<camera>/depth. Both frames from one SDK frameset carry the same
frameset_sequence, captured_monotonic_ns, and captured_utc_ns.
Set camera.enabled: false to retain the configuration while exiting without
opening the device or connecting to the server.
Configuration
server:
ingest_endpoint: "tcp://192.168.5.24:5557"
token: null
camera:
name: dcw2
enabled: true
serial: "REPLACE_WITH_DCW2_SERIAL"
streams:
color:
profile: {width: 640, height: 480, fps: 15}
codec: jpeg
jpeg_quality: 85
depth:
enabled: true
profile: {width: 640, height: 400, fps: 15}
alignment: color # native | color
# scale_m: 0.001 # Optional override if the SDK cannot report it.
alignment: color requests SDK software alignment and emits depth at the color
profile resolution. The DCW2 native depth profile is commonly 640x400 at 15
FPS, while aligned output follows the 640x480 color geometry. Use native to
avoid resampling; the depth and
color coordinates then have different geometries. Depth payloads are unsigned
16-bit little-endian values. Multiply a value by the header's depth_scale_m
to obtain metres. The extension converts the SDK's millimetres-per-unit scale
to metres per unit. Set scale_m only when a vendor SDK build cannot report
the value or reports an incorrect one.
Behavior
- One latest-frame slot is kept per topic; a slow network never builds a queue.
- The server claims
<camera>/colorand<camera>/depthindependently. A local topic always wins a collision. - The optional server ingest token is sent with every claim.
- A duplicate local or remote topic is rejected and the plugin exits with a non-zero status instead of silently publishing under another name.
- The plugin reconnects after a server restart and the server releases idle
remote topics according to
ingest_policy.topic_lease_s. - The server does not decode, transform, or re-encode plugin payloads.
The plugin intentionally does not import the main camera_stream package.
If the SDK reports No device connected for an attached camera, install the
Orbbec v1 udev rules and verify that the configured serial matches the device.
🛠️ Source development and release
The upstream pyorbbecsdk==1.3.2 Linux wheel is mislabeled and contains macOS
ARM binaries. A source checkout can instead build the checksummed official SDK
source into its isolated environment:
cd extensions/orbbec-dcw2
uv sync --extra build --extra dev
uv run camera-stream-orbbec --install-sdk
uv run pytest
uv run camera-stream-orbbec --config ./config.yaml
Do not use uv run --active; the SDK must remain isolated from the main server.
The release build uses the manylinux_2_28 baseline required by the vendor's
prebuilt native library and bundles the runtime plus its Apache 2.0 license:
bash scripts/build_wheels.sh # Docker is required
Pushing a tag such as camera-stream-orbbec-v0.1.2 runs the two-wheel build in
GitHub Actions. Before creating the tag, configure a PyPI Trusted Publisher for
workflow orbbec-dcw2-pypi.yml and environment pypi.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.7 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6af18df094377e209c2b956b77117de5c7f384c162a5b230dac69154bf1925e7
|
|
| MD5 |
797713fe5be742f49cf5035197aa2202
|
|
| BLAKE2b-256 |
36539adc0b27e759e9ba08b873cbcd8f82a828cec8bd600bc613754d8175ea3e
|
File details
Details for the file camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.7 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c39a24b3b62e0de563ecbff1e7b040fccbe31ecdb0bafbc483d22884f244ff7
|
|
| MD5 |
c0a77badf5653947f4c89ca220a2b34e
|
|
| BLAKE2b-256 |
e6050635b9fab292f28f8ed6f582012b843d06a883bd02a834df3b8937465760
|