pub struct FileDemuxer { /* private fields */ }Expand description
Demuxes a file, exposing one src pad per container stream (indexed the
same way as StreamInfo::index). Linking a pad “selects” that stream;
leaving it unlinked just drops its packets. Real demuxer I/O is
blocking, so this is meant to be run as the pipeline’s source thread.
Fan-out (e.g. routing video and audio to separate branches) needs no separate “Tee” element here — it’s just a matter of linking more than one of these pads.
Implementations§
Source§impl FileDemuxer
impl FileDemuxer
Sourcepub fn open(
name: impl Into<String>,
path: impl AsRef<Path>,
) -> Result<(Self, Vec<StreamInfo>), FileDemuxError>
pub fn open( name: impl Into<String>, path: impl AsRef<Path>, ) -> Result<(Self, Vec<StreamInfo>), FileDemuxError>
Opens the file and returns it alongside every stream it contains,
so the caller can inspect them (count, media type, …) before
deciding which of src_pads() to link.
Sourcepub fn stream_parameters(&self, index: usize) -> Option<Parameters>
pub fn stream_parameters(&self, index: usize) -> Option<Parameters>
Codec parameters for one of this file’s streams — what you need to
construct a matching crate::elements::SwDecoder for it.
Sourcepub fn stream_time_base(&self, index: usize) -> Option<Rational>
pub fn stream_time_base(&self, index: usize) -> Option<Rational>
The unit decoded frame timestamps for this stream are expressed in —
what you need to construct a matching crate::elements::Pacer for
it.
Trait Implementations§
Source§impl Element for FileDemuxer
impl Element for FileDemuxer
Source§fn name(&self) -> Arc<str> ⓘ
fn name(&self) -> Arc<str> ⓘ
crate::bus::BusEvent stores names as
Arc<str> for exactly this reason: a hot path like
crate::queue::Queue posting BusEvent::Dropped once per
overflowed buffer shouldn’t pay for a fresh heap allocation every
time it wants to report which element it is.Source§fn element_type(&self) -> ElementType
fn element_type(&self) -> ElementType
ElementType.Source§fn pp_log(&self) -> &PpLog
fn pp_log(&self) -> &PpLog
crate::bus::Bus::post — same
id/name as Element::name, just already wrapped as the
crate::pp_log::PpLog its pp_info!/pp_warn!/pp_error! macros need. A
stored private field, not built fresh per call, for the same reason
name() returns a cheap Arc<str> clone instead of a fresh String
— see its own docs.Source§fn pp_log_mut(&mut self) -> &mut PpLog
fn pp_log_mut(&mut self) -> &mut PpLog
Element::pp_log reads — used by
crate::pipeline::ChainBuilder to stamp the owning
crate::pipeline::Pipeline’s id onto every element that
passes through it, via element_pp_log. Not meant to be called
from anywhere else.Source§impl SourceElement for FileDemuxer
impl SourceElement for FileDemuxer
Source§fn run(&mut self, control: &ControlReceiver, bus: &Bus) -> Result<()>
fn run(&mut self, control: &ControlReceiver, bus: &Bus) -> Result<()>
Eos (normal completion),
crate::pipeline::Pipeline::finish, or Stop (see
ControlMsg::Stop) — call crate::control::drain_control
once per loop iteration to make control responsive between
blocking reads. Read moreSource§fn seek(&mut self, target: Duration) -> Result<Duration>
fn seek(&mut self, target: Duration) -> Result<Duration>
target, an absolute position from the
start of the media (e.g. av_seek_frame for
crate::elements::FileDemuxer). Called by
crate::control::drain_control as part of handling
ControlMsg::Seek, before that message is forwarded to the
source’s own pads — so whatever’s read next comes from the new
position by the time downstream elements are told to flush for it. Read more