nandi/jolt-nativepublic Fork 0
258bbc5161b93d580a4c84363acabe63b0624e88
Commits
Clone
git clone https://git.rickub.com/nandi/jolt-native.git
git clone ssh://git@rickub.com/nandi/jolt-native.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Cargo.toml · 86 lines · 3.9 KBTOML Blame HistoryRaw
Lift freeq's AV media plane out of sleek 90f8b89 nandi 19d ago1[package]
2name = "jolt-moq"
3description = "freeq's AV media plane — MoQ over QUIC, Opus and H.264 — behind a C ABI"
4version.workspace = true
5edition.workspace = true
6license.workspace = true
7repository.workspace = true
8
9[lib]
10# The object jolt loads. `rlib` beside it so the crate's own tests — and any
11# Rust consumer that would rather not go through C — can use it directly.
12name = "joltmoq"
13crate-type = ["cdylib", "rlib"]
14
15[features]
16# cpal's native PipeWire host, on by default. Without it only ALSA PCMs are
17# visible ("pipewire", "sysdefault") and the real OS sources a browser would
18# offer — "EMEET SmartCam C960 Mono" and friends — cannot be picked at all, so
19# device selection in a call becomes guesswork.
20#
21# It is a feature rather than unconditional because it builds `libspa-sys`,
22# which needs pkg-config and PipeWire's own headers on the build machine. The
23# flake at the workspace root supplies them; `--no-default-features` is for a
24# machine that has neither and only needs the crate to compile.
25default = ["pipewire"]
26pipewire = ["cpal/pipewire"]
27
28[dependencies]
29jolt-abi.workspace = true
30log.workspace = true
31
32iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [
33 "opus",
34 "h264",
35] }
36moq-native = { git = "https://github.com/Frando/moq", branch = "deps/iroh-main", default-features = false, features = [
37 "noq",
38 "websocket",
39 "aws-lc-rs",
40] }
41moq-lite = { git = "https://github.com/Frando/moq", branch = "deps/iroh-main" }
42# aws-lc-rs rather than ring, to match what moq-native and iroh already pull in.
43rustls = { version = "0.23", default-features = false, features = ["aws-lc-rs"] }
44# JPEG only — the V4L2 path converts MJPEG frames, and nothing here reads or
45# writes a picture file, so the rest of the format set is dead weight.
46image = { version = "0.25", default-features = false, features = ["jpeg"] }
47# One query parameter (`inst=`) needs escaping. That is the whole use.
48urlencoding = "2"
49libc = "0.2"
50n0-future = "0.3"
51tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time"] }
52anyhow = "1"
53url = "2"
54rand = "0.8"
55env_logger = "0.11"
Let the media plane cross to the phone, camera and all fd0e21a nandi 18d ago56
57# The desktop capture stack. cpal is named only so the `pipewire` feature above
58# can reach it — nothing here calls cpal; moq-media does, and a feature is how
59# you reach a dependency's dependency.
60[target.'cfg(not(target_os = "android"))'.dependencies]
61cpal = { path = "../../third-party/rust/cpal" }
62# V4L2 capture: the fallback path for cameras rusty-capture mishandles.
63v4l2r = "0.0.7"
64# The camera, on a machine that has one behind an ioctl.
65iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [
66 "capture-camera",
67] }
68
69# The phone. Audio needs nothing named here — cpal's AAudio host is what it
70# builds on Android, and moq-media pulls cpal in either way.
71[target.'cfg(target_os = "android")'.dependencies]
72# Camera2 is Java, and `android_camera` is the JNI half of reaching it. 0.22 to
73# match the version libvidya binds against, so one APK holds one `jni`.
74jni = "0.22"
75# Not for this crate's own use: cpal's AAudio host reads the JavaVM out of
76# `ndk_context`, and its handles live in a `static` that nothing in *this*
77# object has ever set. `android_jni` fills it in from the same pair the glue
78# hands over. See the note there.
79ndk-context = "0.1"
80# NOT `capture-camera`: rusty-capture is V4L2 and friends, none of which the
81# phone has. The `android` feature is a different thing — it links `ndk`, which
82# rusty-codecs' `format.rs` references under `cfg(android)` for the MediaCodec
83# path, and without it the crate fails on its own imports.
84iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [
85 "android",
86] }