Skip to main content

CarrierDemuxer

Struct CarrierDemuxer 

Source
pub struct CarrierDemuxer<C: FfmpegCarrier> { /* private fields */ }
Expand description

mediadecode::demuxer::Demuxer impl wrapping ffmpeg::format::context::Input.

Construction is deliberately not on the trait — see Self::open and Self::open_reader.

Implementations§

Source§

impl CarrierDemuxer<View>

Source

pub fn open<P: AsRef<Path> + ?Sized>(path: &P) -> Result<Self, DemuxError>

Opens a container from a filesystem path.

Runs avformat_open_input followed by avformat_find_stream_info, then builds the track table and captures every attachment payload.

Call ffmpeg_next::init once before the first open if you want FFmpeg’s logging and network protocols configured; probing a local container does not require it.

Source

pub fn open_with<P: AsRef<Path> + ?Sized>( path: &P, limits: DemuxLimits, ) -> Result<Self, DemuxError>

Self::open, with the session’s resource budgets named.

The budgets are taken at open rather than through a with_* builder because the attachment half of them is spent here: every attachment payload is captured during this call.

Source

pub fn open_reader<R: Read + Seek + Send + 'static>( reader: R, url: Option<&str>, ) -> Result<Self, DemuxError>

Opens a container from any Read + Seek source.

Source

pub fn open_reader_with<R: Read + Seek + Send + 'static>( reader: R, url: Option<&str>, limits: DemuxLimits, ) -> Result<Self, DemuxError>

Self::open_reader, with the session’s budgets named.

Source

pub const fn input(&self) -> &Input

The wrapped AVFormatContext.

Source

pub const fn limits(&self) -> DemuxLimits

The budgets this session was opened with.

Source

pub const fn format(&self) -> Option<&ContainerFormat>

What the container IS, as libavformat identified it from the bytes — the demuxer it chose, with the short names that demuxer handles and its description.

Decided during the open and fixed for the life of the session, so this answers the same thing at any point and costs nothing to ask.

None only where libavformat left iformat null or its name is not readable text; neither happens on a session that opened successfully.

Nothing here looked at a path. A file’s extension is a claim about its bytes, and this is a reading of them — which is what makes the answer usable on a content-addressed row, where the same bytes under two names are one content. See ContainerFormat for what the demuxer’s name does and does not narrow to.

Source§

impl CarrierDemuxer<Owned>

Source

pub fn open<P: AsRef<Path> + ?Sized>(path: &P) -> Result<Self, DemuxError>

Opens a container from a filesystem path.

Runs avformat_open_input followed by avformat_find_stream_info, then builds the track table and captures every attachment payload.

Call ffmpeg_next::init once before the first open if you want FFmpeg’s logging and network protocols configured; probing a local container does not require it.

Source

pub fn open_with<P: AsRef<Path> + ?Sized>( path: &P, limits: DemuxLimits, ) -> Result<Self, DemuxError>

Self::open, with the session’s resource budgets named.

The budgets are taken at open rather than through a with_* builder because the attachment half of them is spent here: every attachment payload is captured during this call.

Source

pub fn open_reader<R: Read + Seek + Send + 'static>( reader: R, url: Option<&str>, ) -> Result<Self, DemuxError>

Opens a container from any Read + Seek source.

Source

pub fn open_reader_with<R: Read + Seek + Send + 'static>( reader: R, url: Option<&str>, limits: DemuxLimits, ) -> Result<Self, DemuxError>

Self::open_reader, with the session’s budgets named.

Source

pub const fn input(&self) -> &Input

The wrapped AVFormatContext.

Source

pub const fn limits(&self) -> DemuxLimits

The budgets this session was opened with.

Source

pub const fn format(&self) -> Option<&ContainerFormat>

What the container IS, as libavformat identified it from the bytes — the demuxer it chose, with the short names that demuxer handles and its description.

Decided during the open and fixed for the life of the session, so this answers the same thing at any point and costs nothing to ask.

None only where libavformat left iformat null or its name is not readable text; neither happens on a session that opened successfully.

Nothing here looked at a path. A file’s extension is a claim about its bytes, and this is a reading of them — which is what makes the answer usable on a content-addressed row, where the same bytes under two names are one content. See ContainerFormat for what the demuxer’s name does and does not narrow to.

Trait Implementations§

Source§

impl Demuxer for CarrierDemuxer<View>

Source§

fn tracks(&self) -> &[Arc<TrackInfo<Ffmpeg>>]

The track table, held for the life of the session.

Reading it takes nothing away — clone the handles worth keeping. Arc is the carrier because CodecTicket mirrors an AVCodecParameters into owned Rust, which is what makes a row Send + Sync and a table shareable across tasks.

Source§

fn next_packet( &mut self, ) -> Result<Option<DemuxedPacket<Ffmpeg, Self::Buffer>>, DemuxError>

Pulls the next packet.

A refusal that another attempt could survive costs no packet. av_read_frame advances the container, so a conversion that then fails on an allocation would otherwise drop bytes nothing can ask for again. Such a packet is parked instead, and this method re-attempts it before reading another — so a caller who pulls again loses nothing. A refusal about the packet itself is not parked: retrying a malformed packet forever would be worse than passing it by.

Source§

type Adapter = Ffmpeg

Backend-specific vocabulary.
Source§

type Buffer = <View as FfmpegCarrier>::Buffer

Buffer type held by the packets this session produces.
Source§

type TrackHandle = Arc<TrackInfo<Ffmpeg>>

A shareable handle on one row of the track table. Read more
Source§

type Error = DemuxError

Demuxer-specific error type.
Source§

fn seek(&mut self, target: Timestamp) -> Result<(), DemuxError>

Seeks to target, landing on the nearest keyframe at or before it. Read more
Source§

impl Demuxer for CarrierDemuxer<Owned>

Source§

fn tracks(&self) -> &[Arc<TrackInfo<Ffmpeg>>]

The track table, held for the life of the session.

Reading it takes nothing away — clone the handles worth keeping. Arc is the carrier because CodecTicket mirrors an AVCodecParameters into owned Rust, which is what makes a row Send + Sync and a table shareable across tasks.

Source§

fn next_packet( &mut self, ) -> Result<Option<DemuxedPacket<Ffmpeg, Self::Buffer>>, DemuxError>

Pulls the next packet.

A refusal that another attempt could survive costs no packet. av_read_frame advances the container, so a conversion that then fails on an allocation would otherwise drop bytes nothing can ask for again. Such a packet is parked instead, and this method re-attempts it before reading another — so a caller who pulls again loses nothing. A refusal about the packet itself is not parked: retrying a malformed packet forever would be worse than passing it by.

Source§

type Adapter = Ffmpeg

Backend-specific vocabulary.
Source§

type Buffer = <Owned as FfmpegCarrier>::Buffer

Buffer type held by the packets this session produces.
Source§

type TrackHandle = Arc<TrackInfo<Ffmpeg>>

A shareable handle on one row of the track table. Read more
Source§

type Error = DemuxError

Demuxer-specific error type.
Source§

fn seek(&mut self, target: Timestamp) -> Result<(), DemuxError>

Seeks to target, landing on the nearest keyframe at or before it. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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<T> Read<Exclusive, BecauseExclusive> for T
where T: ?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, <T as TryFrom<U>>::Error>

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