ec-node: moq-rs draft-07 for Cloudflare relay
This commit is contained in:
parent
ce8c1319f4
commit
09246513ab
6 changed files with 36 additions and 47 deletions
40
Cargo.lock
generated
40
Cargo.lock
generated
|
|
@ -4157,8 +4157,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "moq-catalog"
|
name = "moq-catalog"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/cloudflare/moq-rs?branch=draft-ietf-moq-transport-07#ebc843de8504e37d36c3134a1181513ebdf7a34a"
|
||||||
checksum = "2b9cf3655b840e98b6527e75975b9406560bdd20a637223e653f04464e114f17"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
@ -4260,9 +4259,8 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "moq-native-ietf"
|
name = "moq-native-ietf"
|
||||||
version = "0.7.1"
|
version = "0.5.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/cloudflare/moq-rs?branch=draft-ietf-moq-transport-07#ebc843de8504e37d36c3134a1181513ebdf7a34a"
|
||||||
checksum = "3e8e6cb8df625bcf7c5e09d18b155467aa36fe84a47b95af55b485f5613fd91c"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
@ -4271,7 +4269,6 @@ dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"moq-transport",
|
"moq-transport",
|
||||||
"quinn",
|
"quinn",
|
||||||
"rand 0.8.5",
|
|
||||||
"ring",
|
"ring",
|
||||||
"rustls",
|
"rustls",
|
||||||
"rustls-native-certs 0.7.3",
|
"rustls-native-certs 0.7.3",
|
||||||
|
|
@ -4285,9 +4282,8 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "moq-pub"
|
name = "moq-pub"
|
||||||
version = "0.8.8"
|
version = "0.8.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/cloudflare/moq-rs?branch=draft-ietf-moq-transport-07#ebc843de8504e37d36c3134a1181513ebdf7a34a"
|
||||||
checksum = "c47f3c2fbd884037543088a44c36d8a82388a3c38fde13c4e1946f61b94f0d45"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -4308,20 +4304,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "moq-transport"
|
name = "moq-transport"
|
||||||
version = "0.12.2"
|
version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/cloudflare/moq-rs?branch=draft-ietf-moq-transport-07#ebc843de8504e37d36c3134a1181513ebdf7a34a"
|
||||||
checksum = "50d2f896962af0634a5b71f274a07590fbbe21f30c89d986066479078644b477"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures",
|
"futures",
|
||||||
"log",
|
"log",
|
||||||
"paste",
|
"paste",
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"serde_with",
|
|
||||||
"thiserror 1.0.69",
|
"thiserror 1.0.69",
|
||||||
"tokio",
|
"tokio",
|
||||||
"uuid",
|
|
||||||
"web-transport",
|
"web-transport",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -5703,18 +5694,6 @@ dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "qlog"
|
|
||||||
version = "0.15.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0f15b83c59e6b945f2261c95a1dd9faf239187f32ff0a96af1d1d28c4557f919"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"serde_with",
|
|
||||||
"smallvec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quick-xml"
|
name = "quick-xml"
|
||||||
version = "0.38.4"
|
version = "0.38.4"
|
||||||
|
|
@ -5755,7 +5734,6 @@ dependencies = [
|
||||||
"fastbloom",
|
"fastbloom",
|
||||||
"getrandom 0.3.4",
|
"getrandom 0.3.4",
|
||||||
"lru-slab",
|
"lru-slab",
|
||||||
"qlog",
|
|
||||||
"rand 0.9.2",
|
"rand 0.9.2",
|
||||||
"ring",
|
"ring",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
|
|
@ -6631,7 +6609,6 @@ version = "1.0.149"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.13.0",
|
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
"memchr",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -6889,9 +6866,6 @@ name = "smallvec"
|
||||||
version = "1.15.1"
|
version = "1.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smol_str"
|
name = "smol_str"
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,9 @@ tracing-subscriber.workspace = true
|
||||||
hang = "0.14.0"
|
hang = "0.14.0"
|
||||||
moq-mux = "0.2.1"
|
moq-mux = "0.2.1"
|
||||||
moq-native = { version = "0.13.1", default-features = true }
|
moq-native = { version = "0.13.1", default-features = true }
|
||||||
moq-native-ietf = "0.7.1"
|
moq-native-ietf = { git = "https://github.com/cloudflare/moq-rs", branch = "draft-ietf-moq-transport-07" }
|
||||||
moq-pub = "0.8.8"
|
moq-pub = { git = "https://github.com/cloudflare/moq-rs", branch = "draft-ietf-moq-transport-07" }
|
||||||
moq-transport = "0.12.2"
|
moq-transport = { git = "https://github.com/cloudflare/moq-rs", branch = "draft-ietf-moq-transport-07" }
|
||||||
url = "2"
|
url = "2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
||||||
|
|
@ -4229,26 +4229,29 @@ async fn wt_publish(args: WtPublishArgs) -> Result<()> {
|
||||||
let relay_url = Url::parse(&args.url)
|
let relay_url = Url::parse(&args.url)
|
||||||
.with_context(|| format!("invalid relay url: {}", args.url))?;
|
.with_context(|| format!("invalid relay url: {}", args.url))?;
|
||||||
|
|
||||||
// Cloudflare's relay currently implements a subset of the IETF MoQ Transport draft-07.
|
// Cloudflare's public relay currently implements a subset of the IETF MoQ Transport draft-07.
|
||||||
// Use moq-transport (via moq-native-ietf) for interoperability.
|
// The upstream (newer-draft) moq stack does not interop; use the draft-07 compatibility
|
||||||
|
// implementation from the moq-rs repository.
|
||||||
let mut tls_args = moq_native_ietf::tls::Args::default();
|
let mut tls_args = moq_native_ietf::tls::Args::default();
|
||||||
tls_args.disable_verify = args.tls_disable_verify;
|
tls_args.disable_verify = args.tls_disable_verify;
|
||||||
let tls = tls_args.load().context("failed to load TLS config")?;
|
let tls = tls_args.load().context("failed to load TLS config")?;
|
||||||
|
|
||||||
let bind: std::net::SocketAddr = "[::]:0".parse().expect("valid bind addr");
|
let quic = moq_native_ietf::quic::Endpoint::new(moq_native_ietf::quic::Config {
|
||||||
let quic = moq_native_ietf::quic::Endpoint::new(moq_native_ietf::quic::Config::new(
|
bind: "[::]:0".parse().expect("valid bind addr"),
|
||||||
bind, None, tls,
|
tls,
|
||||||
))
|
})
|
||||||
.context("failed to init moq-native-ietf endpoint")?;
|
.context("failed to init moq-native-ietf endpoint")?;
|
||||||
|
|
||||||
let namespace = moq_transport::coding::TrackNamespace::from_utf8_path(&args.name);
|
let (writer, _, reader) = moq_transport::serve::Tracks::new(
|
||||||
let (writer, _, reader) = moq_transport::serve::Tracks::new(namespace).produce();
|
moq_transport::coding::Tuple::from_utf8_path(&args.name),
|
||||||
|
)
|
||||||
|
.produce();
|
||||||
let mut media = moq_pub::Media::new(writer).context("failed to init moq-pub media parser")?;
|
let mut media = moq_pub::Media::new(writer).context("failed to init moq-pub media parser")?;
|
||||||
|
|
||||||
tracing::info!(url=%relay_url, name=%args.name, "connecting to relay");
|
tracing::info!(url=%relay_url, name=%args.name, "connecting to relay");
|
||||||
let (session, _cid) = quic
|
let session = quic
|
||||||
.client
|
.client
|
||||||
.connect(&relay_url, None)
|
.connect(&relay_url)
|
||||||
.await
|
.await
|
||||||
.context("failed to connect to relay")?;
|
.context("failed to connect to relay")?;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ newer draft implementations.
|
||||||
|
|
||||||
Implementation choice:
|
Implementation choice:
|
||||||
- `ec-node wt-publish` uses `moq-native-ietf` + `moq-transport` + `moq-pub` (fMP4 ingestion) for Cloudflare relay compatibility.
|
- `ec-node wt-publish` uses `moq-native-ietf` + `moq-transport` + `moq-pub` (fMP4 ingestion) for Cloudflare relay compatibility.
|
||||||
|
- Pin these crates to the `cloudflare/moq-rs` git branch `draft-ietf-moq-transport-07` until the relay supports newer drafts (crates.io releases observed to fail with `closed by peer`).
|
||||||
|
|
||||||
### Share link
|
### Share link
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,14 @@ in
|
||||||
${lib.optionalString cfg.tlsDisableVerify "cmd+=(--tls-disable-verify)"}
|
${lib.optionalString cfg.tlsDisableVerify "cmd+=(--tls-disable-verify)"}
|
||||||
${extraArgsLine}
|
${extraArgsLine}
|
||||||
|
|
||||||
exec "''${cmd[@]}"
|
# Keep the unit alive even if the relay is temporarily unreachable.
|
||||||
|
# This avoids `switch-to-configuration test` failing due to a unit that exits
|
||||||
|
# quickly during activation.
|
||||||
|
trap 'exit 0' INT TERM
|
||||||
|
while true; do
|
||||||
|
"''${cmd[@]}" || true
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,10 @@ rustPlatform.buildRustPackage {
|
||||||
|
|
||||||
cargoLock = {
|
cargoLock = {
|
||||||
lockFile = ../../Cargo.lock;
|
lockFile = ../../Cargo.lock;
|
||||||
|
outputHashes = {
|
||||||
|
# Filled iteratively when git dependencies change.
|
||||||
|
"moq-catalog-0.2.2" = "sha256-df9KXVBRiNewDJ7ZgGBja81PPnk8vC9TA0bDIG0892o=";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoBuildFlags = [ "-p" "ec-node" ];
|
cargoBuildFlags = [ "-p" "ec-node" ];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue