Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b373b1e
feat: migrated till add forward to subscribe namespace
itzmanish Jan 13, 2026
8058976
feat: reqeust ok #1274
itzmanish Jan 13, 2026
8a97d5a
feat: remove expires field from SUBSCRIBE_OK #1282
itzmanish Jan 13, 2026
2e9d34d
feat: make forward a parameter #1283
itzmanish Jan 13, 2026
37e4b61
feat: use request id in unsubscribe namespace for correlation #1292
itzmanish Jan 13, 2026
4cca9e2
feat: move forward and other field to paramters
itzmanish Jan 13, 2026
8f1f91f
feat: migrate the data plane header type and track alias on publisher
itzmanish Jan 13, 2026
239c08d
feat: remove unused messages
itzmanish Jan 13, 2026
e5efbae
fix: use if let instead of match for single branch
itzmanish Jan 13, 2026
33e7979
feat: use dynamic grouops and fix some minor changes
itzmanish Jan 16, 2026
42cdf5c
feat: remove announce and add publish
itzmanish Jan 23, 2026
eaed1ef
feat: add subscribe namespace
itzmanish Jan 27, 2026
fedecbf
fix: publish_ns and subscribe_ns
itzmanish Jan 29, 2026
bbfaf3d
fix: remove deprecated announce methods
itzmanish Jan 29, 2026
cf4c6cc
fix: blocking code on subscription received in moq-pub
itzmanish Jan 30, 2026
f3638dc
fix: cargo.lock missed on last commit to push
itzmanish Jan 30, 2026
8f85925
fix: add check for subscribe close in serve_[subgroup/datagram]
itzmanish Feb 2, 2026
08960b5
fix: race between publish and subscribe aka pull/push based media flow
itzmanish Feb 5, 2026
2c3fa27
fix: detect and evict stale cached TrackReaders
englishm Jan 29, 2026
ce4ee3b
style: fix unnecessary_unwrap clippy lint
englishm Jan 29, 2026
56c320c
chore: release
github-actions[bot] Jan 29, 2026
943ef09
Add moq-test-client crate for interoperability testing
englishm Feb 3, 2026
3d9f22c
Fix cargo fmt formatting
englishm Feb 3, 2026
846d0af
chore: release
github-actions[bot] Feb 3, 2026
66610a3
Merge branch 'main' into feat/publish
itzmanish Feb 6, 2026
9240b16
fix: moq-test-client for publish
itzmanish Feb 9, 2026
0ce8f0d
fix: CI pipeline
itzmanish Feb 9, 2026
3b0ee91
fix: use correct track alias everywhere
itzmanish Feb 11, 2026
0e60c1f
Merge branch 'main' of https://github.com/itzmanish/moq-rs into draft-16
itzmanish Feb 11, 2026
61d09de
fix: track is_closed method
itzmanish Feb 11, 2026
907cc5c
Merge branch 'feat/publish' of https://github.com/itzmanish/moq-rs in…
itzmanish Feb 11, 2026
531fde5
fix: use publish message wire format from draft-16
itzmanish Feb 11, 2026
ee289c2
fix: use forward true when publishing track
itzmanish Feb 11, 2026
8f494d0
fix: prevent moof/mdat interleaving in moq-sub causing H.264 decode e…
itzmanish Feb 12, 2026
bcb59a2
fix: delta encoded keyvaluepair and misc.
itzmanish Mar 14, 2026
4c251dd
chore: remove unnecessory docs
itzmanish Mar 14, 2026
c88bd5f
Upgrade web-transport crates to v0.10 and add WT subprotocol negotiation
englishm Mar 15, 2026
c520e13
Fix RequestOk/RequestError dispatch to reach both publisher and subsc…
englishm Mar 15, 2026
4cde575
Merge pull request #1 from englishm-cloudflare/me/wt-crate-upgrade-dr…
itzmanish Mar 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 78 additions & 48 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ members = [
resolver = "2"

[workspace.dependencies]
web-transport = "0.3"
web-transport = "0.10"
env_logger = "0.11"
log = { version = "0.4", features = ["std"] }

Expand Down
1 change: 1 addition & 0 deletions moq-clock-ietf/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ url = "2"

# Async stuff
tokio = { version = "1", features = ["full"] }
futures = "0.3"

# CLI, logging, error handling
clap = { version = "4", features = ["derive"] }
Expand Down
48 changes: 43 additions & 5 deletions moq-clock-ietf/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use moq_native_ietf::quic;

use anyhow::Context;
use futures::{stream::FuturesUnordered, FutureExt, StreamExt};

mod cli;
mod clock;
Expand All @@ -10,11 +11,36 @@ use cli::Cli;

use moq_transport::{
coding::TrackNamespace,
serve,
session::{Publisher, Subscriber},
serve::{self, TracksReader},
session::{Publisher, SessionError, Subscriber},
};

/// The main entry point for the MoQ Clock IETF example.
async fn serve_subscriptions(
mut publisher: Publisher,
tracks: TracksReader,
) -> Result<(), SessionError> {
let mut tasks: FuturesUnordered<futures::future::BoxFuture<'static, ()>> =
FuturesUnordered::new();

loop {
tokio::select! {
Some(subscribed) = publisher.subscribed() => {
let info = subscribed.info.clone();
let tracks = tracks.clone();
log::info!("serving subscribe: {:?}", info);

tasks.push(async move {
if let Err(err) = Publisher::serve_subscribe(subscribed, tracks).await {
log::warn!("failed serving subscribe: {:?}, error: {}", info, err);
}
}.boxed());
}
_ = tasks.next(), if !tasks.is_empty() => {}
else => return Ok(()),
}
}
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
env_logger::init();
Expand Down Expand Up @@ -59,10 +85,16 @@ async fn main() -> anyhow::Result<()> {
let track_writer = tracks_writer.create(&config.track).unwrap();
let clock_publisher = clock::Publisher::new_datagram(track_writer.datagrams()?);

let publish_ns = publisher
.publish_namespace(tracks_reader.namespace.clone())
.await
.context("failed to register namespace")?;

tokio::select! {
res = session.run() => res.context("session error")?,
res = clock_publisher.run() => res.context("clock error")?,
res = publisher.announce(tracks_reader) => res.context("failed to serve tracks")?,
res = serve_subscriptions(publisher, tracks_reader) => res.context("failed to serve tracks")?,
res = publish_ns.closed() => res.context("namespace closed")?,
}
} else {
log::info!("publishing clock via streams");
Expand All @@ -75,10 +107,16 @@ async fn main() -> anyhow::Result<()> {
let track_writer = tracks_writer.create(&config.track).unwrap();
let clock_publisher = clock::Publisher::new(track_writer.subgroups()?);

let publish_ns = publisher
.publish_namespace(tracks_reader.namespace.clone())
.await
.context("failed to register namespace")?;

tokio::select! {
res = session.run() => res.context("session error")?,
res = clock_publisher.run() => res.context("clock error")?,
res = publisher.announce(tracks_reader) => res.context("failed to serve tracks")?,
res = serve_subscriptions(publisher, tracks_reader) => res.context("failed to serve tracks")?,
res = publish_ns.closed() => res.context("namespace closed")?,
}
}
} else {
Expand Down
Loading