Struct MediaSourceStream
pub struct MediaSourceStream { /* private fields */ }
dep_symphonia
only.Expand description
MediaSourceStream
is the main reader type for Symphonia.
By using type erasure and dynamic dispatch, MediaSourceStream
wraps and hides the inner
reader from the consumer, allowing any typical Read
er to be used with Symphonia in a generic
way, selectable at runtime.
MediaSourceStream
is designed to provide speed and flexibility in a number of challenging I/O
scenarios.
First, to minimize system call and dynamic dispatch overhead on the inner reader, and to
amortize that overhead over many bytes, MediaSourceStream
implements an exponentially growing
read-ahead buffer. The read-ahead length starts at 1kB, and doubles in length as more sequential
reads are performed until it reaches 32kB. Growing the read-ahead length over time reduces the
excess data buffered on consecutive seek()
calls.
Second, to better support non-seekable sources, MediaSourceStream
implements a configurable
length buffer cache. By default, the buffer caches allows backtracking by up-to the minimum of
either buffer_len - 32kB
or the total number of bytes read since instantiation or the last
buffer cache invalidation. Note that regular a seek()
will invalidate the buffer cache.
Implementations§
§impl MediaSourceStream
impl MediaSourceStream
pub fn new( source: Box<dyn MediaSource>, options: MediaSourceStreamOptions, ) -> MediaSourceStream ⓘ
Trait Implementations§
§impl MediaSource for MediaSourceStream
impl MediaSource for MediaSourceStream
§impl Read for MediaSourceStream
impl Read for MediaSourceStream
§fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> ⓘ
fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> ⓘ
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error> ⓘ
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error> ⓘ
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error> ⓘ
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error> ⓘ
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error> ⓘ
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error> ⓘ
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error> ⓘ
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error> ⓘ
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error> ⓘ
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error> ⓘ
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error> ⓘ
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error> ⓘ
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read more§impl ReadBytes for MediaSourceStream
impl ReadBytes for MediaSourceStream
§fn read_byte(&mut self) -> Result<u8, Error> ⓘ
fn read_byte(&mut self) -> Result<u8, Error> ⓘ
§fn read_double_bytes(&mut self) -> Result<[u8; 2], Error> ⓘ
fn read_double_bytes(&mut self) -> Result<[u8; 2], Error> ⓘ
§fn read_triple_bytes(&mut self) -> Result<[u8; 3], Error> ⓘ
fn read_triple_bytes(&mut self) -> Result<[u8; 3], Error> ⓘ
§fn read_quad_bytes(&mut self) -> Result<[u8; 4], Error> ⓘ
fn read_quad_bytes(&mut self) -> Result<[u8; 4], Error> ⓘ
§fn read_buf(&mut self, buf: &mut [u8]) -> Result<usize, Error> ⓘ
fn read_buf(&mut self, buf: &mut [u8]) -> Result<usize, Error> ⓘ
§fn read_buf_exact(&mut self, buf: &mut [u8]) -> Result<(), Error> ⓘ
fn read_buf_exact(&mut self, buf: &mut [u8]) -> Result<(), Error> ⓘ
§fn scan_bytes_aligned<'a>(
&mut self,
_: &[u8],
_: usize,
_: &'a mut [u8],
) -> Result<&'a mut [u8], Error> ⓘ
fn scan_bytes_aligned<'a>( &mut self, _: &[u8], _: usize, _: &'a mut [u8], ) -> Result<&'a mut [u8], Error> ⓘ
§fn ignore_bytes(&mut self, count: u64) -> Result<(), Error> ⓘ
fn ignore_bytes(&mut self, count: u64) -> Result<(), Error> ⓘ
§fn read_u8(&mut self) -> Result<u8, Error> ⓘ
fn read_u8(&mut self) -> Result<u8, Error> ⓘ
§fn read_i8(&mut self) -> Result<i8, Error> ⓘ
fn read_i8(&mut self) -> Result<i8, Error> ⓘ
§fn read_u16(&mut self) -> Result<u16, Error> ⓘ
fn read_u16(&mut self) -> Result<u16, Error> ⓘ
§fn read_i16(&mut self) -> Result<i16, Error> ⓘ
fn read_i16(&mut self) -> Result<i16, Error> ⓘ
§fn read_be_u16(&mut self) -> Result<u16, Error> ⓘ
fn read_be_u16(&mut self) -> Result<u16, Error> ⓘ
§fn read_be_i16(&mut self) -> Result<i16, Error> ⓘ
fn read_be_i16(&mut self) -> Result<i16, Error> ⓘ
§fn read_u24(&mut self) -> Result<u32, Error> ⓘ
fn read_u24(&mut self) -> Result<u32, Error> ⓘ
§fn read_i24(&mut self) -> Result<i32, Error> ⓘ
fn read_i24(&mut self) -> Result<i32, Error> ⓘ
§fn read_be_u24(&mut self) -> Result<u32, Error> ⓘ
fn read_be_u24(&mut self) -> Result<u32, Error> ⓘ
§fn read_be_i24(&mut self) -> Result<i32, Error> ⓘ
fn read_be_i24(&mut self) -> Result<i32, Error> ⓘ
§fn read_u32(&mut self) -> Result<u32, Error> ⓘ
fn read_u32(&mut self) -> Result<u32, Error> ⓘ
§fn read_i32(&mut self) -> Result<i32, Error> ⓘ
fn read_i32(&mut self) -> Result<i32, Error> ⓘ
§fn read_be_u32(&mut self) -> Result<u32, Error> ⓘ
fn read_be_u32(&mut self) -> Result<u32, Error> ⓘ
§fn read_be_i32(&mut self) -> Result<i32, Error> ⓘ
fn read_be_i32(&mut self) -> Result<i32, Error> ⓘ
§fn read_u64(&mut self) -> Result<u64, Error> ⓘ
fn read_u64(&mut self) -> Result<u64, Error> ⓘ
§fn read_i64(&mut self) -> Result<i64, Error> ⓘ
fn read_i64(&mut self) -> Result<i64, Error> ⓘ
§fn read_be_u64(&mut self) -> Result<u64, Error> ⓘ
fn read_be_u64(&mut self) -> Result<u64, Error> ⓘ
§fn read_be_i64(&mut self) -> Result<i64, Error> ⓘ
fn read_be_i64(&mut self) -> Result<i64, Error> ⓘ
§fn read_f32(&mut self) -> Result<f32, Error> ⓘ
fn read_f32(&mut self) -> Result<f32, Error> ⓘ
§fn read_be_f32(&mut self) -> Result<f32, Error> ⓘ
fn read_be_f32(&mut self) -> Result<f32, Error> ⓘ
§fn read_f64(&mut self) -> Result<f64, Error> ⓘ
fn read_f64(&mut self) -> Result<f64, Error> ⓘ
§fn read_be_f64(&mut self) -> Result<f64, Error> ⓘ
fn read_be_f64(&mut self) -> Result<f64, Error> ⓘ
§fn read_boxed_slice(&mut self, len: usize) -> Result<Box<[u8]>, Error> ⓘ
fn read_boxed_slice(&mut self, len: usize) -> Result<Box<[u8]>, Error> ⓘ
§impl Seek for MediaSourceStream
impl Seek for MediaSourceStream
§fn seek(&mut self, pos: SeekFrom) -> Result<u64, Error> ⓘ
fn seek(&mut self, pos: SeekFrom) -> Result<u64, Error> ⓘ
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error> ⓘ
fn rewind(&mut self) -> Result<(), Error> ⓘ
Source§fn stream_len(&mut self) -> Result<u64, Error> ⓘ
fn stream_len(&mut self) -> Result<u64, Error> ⓘ
seek_stream_len
)§impl SeekBuffered for MediaSourceStream
impl SeekBuffered for MediaSourceStream
§fn ensure_seekback_buffer(&mut self, len: usize)
fn ensure_seekback_buffer(&mut self, len: usize)
len
bytes will be available for backwards seeking if len
bytes have been
previously read.§fn unread_buffer_len(&self) -> usize ⓘ
fn unread_buffer_len(&self) -> usize ⓘ
§fn read_buffer_len(&self) -> usize ⓘ
fn read_buffer_len(&self) -> usize ⓘ
§fn seek_buffered(&mut self, pos: u64) -> u64 ⓘ
fn seek_buffered(&mut self, pos: u64) -> u64 ⓘ
§fn seek_buffered_rel(&mut self, delta: isize) -> u64 ⓘ
fn seek_buffered_rel(&mut self, delta: isize) -> u64 ⓘ
§fn seek_buffered_rev(&mut self, delta: usize)
fn seek_buffered_rev(&mut self, delta: usize)
Auto Trait Implementations§
impl Freeze for MediaSourceStream
impl !RefUnwindSafe for MediaSourceStream
impl Send for MediaSourceStream
impl Sync for MediaSourceStream
impl Unpin for MediaSourceStream
impl !UnwindSafe for MediaSourceStream
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize ⓘ
fn byte_align(&self) -> usize ⓘ
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of_val(&self) -> usize ⓘ
fn mem_align_of_val(&self) -> usize ⓘ
Source§fn mem_size_of_val(&self) -> usize ⓘ
fn mem_size_of_val(&self) -> usize ⓘ
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.