Skip to main content

Consumer

Struct Consumer 

Source
pub struct Consumer { /* private fields */ }
Expand description

Subscribe to a moq-mux audio track and emit decoded PCM in the layout declared by Config.

The mirror of encode::Producer: output format / sample rate / channel count are fixed at construction, and read returns Frames carrying the codec activity they were decoded from.

Implementations§

Source§

impl Consumer

Source

pub async fn new( broadcast: &Consumer, catalog: &AudioConfig, name: impl Into<String>, config: Config, ) -> Result<Self, Error>

Subscribe to name in broadcast, using the catalog entry to pick the codec.

Source

pub fn config(&self) -> &Config

The config this consumer was built with.

Source

pub fn latency_max(&self) -> Duration

The effective latency budget after clamping to the publisher’s retention window.

Source

pub fn sample_rate(&self) -> u32

Sample rate samples are actually delivered at, which is Config::sample_rate resolved against the catalog.

Source

pub fn channels(&self) -> u32

Channel count samples are actually delivered at, which is Config::channels resolved against the catalog.

Source

pub async fn read(&mut self) -> Result<Option<Frame>, Error>

Read the next decoded PCM frame, or None when the track ends.

Frame::activity reports whether the packet these samples came from coded audio. It describes where the frame begins, so a resampled frame that straddles a change carries the activity its first sample came from and the next frame carries the new one.

A timestamp that doesn’t continue the previous packet is a hole in the output, not a splice: nothing is carried across it, and the frames on either side stay anchored to their own packet timeline, so the hole is there to see. “Doesn’t continue” allows for the quantization the stamps carry, which on a millisecond-stamped ingest is most of a millisecond.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more