Blob: archive/str0m-probe/README.md
str0m interoperability probe
A standalone Linux publisher and aiortc listener test Cloudflare SFU audio, explicit negotiated channel IDs, reliable telemetry, loss-tolerant data, and command replies. The publisher deliberately drops some outgoing DTLS application datagrams after setup. Audio consists of synthetic 48 kHz stereo Opus silence.
This experiment creates independent SFU sessions using REALTIME_APP_ID and
REALTIME_APP_TOKEN from the root .credential.env. It closes its allocated
channels and tracks afterward. It does not access the board or deployed Worker.
Run
From the repository root, with Rust 1.88 or later and Python 3.11:
python3.11 -m venv .tools/archive-python
.tools/archive-python/bin/pip install -r archive/str0m-probe/requirements.txt
cargo build --manifest-path archive/str0m-probe/Cargo.toml --locked --release
.tools/archive-python/bin/python archive/str0m-probe/sfu_probe.pyThe script uses the archive's shared SFU HTTP helper. It generates a temporary
certificate for the Linux publisher; this is a test input, not a requirement to
provision device certificates from a computer. Private keys, session receipts,
and sanitized results go to ignored artifacts/archive/str0m-probe/.
Layout and pins
src/driver.rs owns str0m and its UDP socket. src/main.rs exposes a bounded
JSON subprocess protocol to sfu_probe.py. Cargo.lock pins str0m 0.23.1 and
the RustCrypto provider 0.6.0. The copied provider's patch notes
explain its certificate-generation feature and explicit crypto selection.
This frozen copy is independent of the maintained firmware's provider.
The library can also be compiled with the project's Xtensa toolchain:
RUSTFLAGS='--cfg espidf_time64' cargo +esp-radio build \
--manifest-path archive/str0m-probe/Cargo.toml --locked --lib --release \
--target xtensa-esp32s3-espidf -Zbuild-std=std,panic_abortThat command generates target library code; it does not link or flash an ESP-IDF application. Hardware support belongs to the maintained firmware.