From 746701f4687c3add39bc81a0b61bb217ae21c9ca Mon Sep 17 00:00:00 2001 From: "Franz Heinzmann (Frando)" Date: Mon, 12 Feb 2024 14:40:44 +0100 Subject: [PATCH 1/2] feat: moq-pub as library with generic input --- moq-pub/src/lib.rs | 1 + moq-pub/src/main.rs | 8 ++++---- moq-pub/src/media.rs | 19 +++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 moq-pub/src/lib.rs diff --git a/moq-pub/src/lib.rs b/moq-pub/src/lib.rs new file mode 100644 index 00000000..b30398d4 --- /dev/null +++ b/moq-pub/src/lib.rs @@ -0,0 +1 @@ +pub mod media; diff --git a/moq-pub/src/main.rs b/moq-pub/src/main.rs index d00a89e3..a9ab3abc 100644 --- a/moq-pub/src/main.rs +++ b/moq-pub/src/main.rs @@ -6,10 +6,8 @@ use clap::Parser; mod cli; use cli::*; -mod media; -use media::*; - use moq_transport::cache::broadcast; +use moq_pub::media::Media; // TODO: clap complete @@ -24,9 +22,11 @@ async fn main() -> anyhow::Result<()> { tracing::subscriber::set_global_default(tracer).unwrap(); let config = Config::parse(); + log::debug!("config {config:?}"); + let input = tokio::io::stdin(); let (publisher, subscriber) = broadcast::new(""); - let mut media = Media::new(&config, publisher).await?; + let mut media = Media::new(input, publisher).await?; // Create a list of acceptable root certificates. let mut roots = rustls::RootCertStore::empty(); diff --git a/moq-pub/src/media.rs b/moq-pub/src/media.rs index a651f33a..755fb176 100644 --- a/moq-pub/src/media.rs +++ b/moq-pub/src/media.rs @@ -1,4 +1,3 @@ -use crate::cli::Config; use anyhow::{self, Context}; use moq_transport::cache::{broadcast, fragment, segment, track}; use moq_transport::VarInt; @@ -8,9 +7,9 @@ use std::cmp::max; use std::collections::HashMap; use std::io::Cursor; use std::time; -use tokio::io::AsyncReadExt; +use tokio::io::{AsyncRead, AsyncReadExt}; -pub struct Media { +pub struct Media { // We hold on to publisher so we don't close then while media is still being published. _broadcast: broadcast::Publisher, _catalog: track::Publisher, @@ -18,15 +17,15 @@ pub struct Media { // Tracks based on their track ID. tracks: HashMap, + input: I } -impl Media { - pub async fn new(_config: &Config, mut broadcast: broadcast::Publisher) -> anyhow::Result { - let mut stdin = tokio::io::stdin(); - let ftyp = read_atom(&mut stdin).await?; +impl Media { + pub async fn new(mut input: I, mut broadcast: broadcast::Publisher) -> anyhow::Result { + let ftyp = read_atom(&mut input).await?; anyhow::ensure!(&ftyp[4..8] == b"ftyp", "expected ftyp atom"); - let moov = read_atom(&mut stdin).await?; + let moov = read_atom(&mut input).await?; anyhow::ensure!(&moov[4..8] == b"moov", "expected moov atom"); let mut init = ftyp; @@ -77,16 +76,16 @@ impl Media { _catalog: catalog, _init: init_track, tracks, + input }) } pub async fn run(&mut self) -> anyhow::Result<()> { - let mut stdin = tokio::io::stdin(); // The current track name let mut current = None; loop { - let atom = read_atom(&mut stdin).await?; + let atom = read_atom(&mut self.input).await?; let mut reader = Cursor::new(&atom); let header = mp4::BoxHeader::read(&mut reader)?; From 93a61fe61fac6ff9e79e6f68aa57a2fccd62d102 Mon Sep 17 00:00:00 2001 From: "Franz Heinzmann (Frando)" Date: Tue, 13 Feb 2024 12:31:23 +0100 Subject: [PATCH 2/2] chore: cleanup --- moq-pub/src/main.rs | 3 +-- moq-pub/src/media.rs | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/moq-pub/src/main.rs b/moq-pub/src/main.rs index a9ab3abc..4ab850a8 100644 --- a/moq-pub/src/main.rs +++ b/moq-pub/src/main.rs @@ -6,8 +6,8 @@ use clap::Parser; mod cli; use cli::*; -use moq_transport::cache::broadcast; use moq_pub::media::Media; +use moq_transport::cache::broadcast; // TODO: clap complete @@ -22,7 +22,6 @@ async fn main() -> anyhow::Result<()> { tracing::subscriber::set_global_default(tracer).unwrap(); let config = Config::parse(); - log::debug!("config {config:?}"); let input = tokio::io::stdin(); let (publisher, subscriber) = broadcast::new(""); diff --git a/moq-pub/src/media.rs b/moq-pub/src/media.rs index 755fb176..38335849 100644 --- a/moq-pub/src/media.rs +++ b/moq-pub/src/media.rs @@ -17,7 +17,7 @@ pub struct Media { // Tracks based on their track ID. tracks: HashMap, - input: I + input: I, } impl Media { @@ -76,7 +76,7 @@ impl Media { _catalog: catalog, _init: init_track, tracks, - input + input, }) }