use std::task::Poll;
use bytes::Bytes;
mod consumer;
pub(crate) mod jitter;
mod producer;
mod source;
pub mod flv;
pub mod fmp4;
pub mod hls;
pub mod legacy;
pub mod loc;
pub mod mkv;
pub mod ts;
pub use consumer::Consumer;
pub use producer::Producer;
pub(crate) use source::{CatalogSource, ExportSource};
pub type Timestamp = moq_net::Timescale<1_000_000>;
#[derive(Clone, Debug)]
pub struct Frame {
pub timestamp: Timestamp,
pub payload: Bytes,
pub keyframe: bool,
}
pub trait Container {
type Error: std::error::Error + Send + Sync + Unpin + From<moq_net::Error>;
fn write(&self, group: &mut moq_net::GroupProducer, frames: &[Frame]) -> Result<(), Self::Error>;
fn poll_read(
&self,
group: &mut moq_net::GroupConsumer,
waiter: &kio::Waiter,
) -> Poll<Result<Option<Vec<Frame>>, Self::Error>>;
fn read(
&self,
group: &mut moq_net::GroupConsumer,
) -> impl std::future::Future<Output = Result<Option<Vec<Frame>>, Self::Error>>
where
Self: Sync,
{
async { kio::wait(|waiter| self.poll_read(group, waiter)).await }
}
}