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.
Metadata
Release files for camera-stream-orbbec 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details for camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
| camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details for camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
Total release size: 27.4 MB
Release files / camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 13.7 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6af18df094377e209c2b956b77117de5c7f384c162a5b230dac69154bf1925e7
|
|
BLAKE2b-256 checksum How to use checksums |
36539adc0b27e759e9ba08b873cbcd8f82a828cec8bd600bc613754d8175ea3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 13.7 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4c39a24b3b62e0de563ecbff1e7b040fccbe31ecdb0bafbc483d22884f244ff7
|
|
BLAKE2b-256 checksum How to use checksums |
e6050635b9fab292f28f8ed6f582012b843d06a883bd02a834df3b8937465760
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Security for camera-stream-orbbec 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.