pub struct TsStreamingDemuxer { /* private fields */ }Expand description
Streaming MPEG-TS demuxer. Holds the PES reassembly buffer for one in-flight access unit only — yields whenever a PUSI=1 packet closes the current sample (or at EOF for the final pending sample).
Squad-37 added:
- Multi-program awareness:
programs()returns every program the PAT advertised plus their PMT contents;select_program()switches the active video PID + audio extraction to a different program. Default behaviour is unchanged (first program with a recognised video stream wins). - Encrypted-stream guard: if any packet on the active video PID
carries
transport_scrambling_control != 0, we log a one-time typed warn (“encrypted TS stream; we don’t carry CA tables — drop video output”) and switch to a “drop everything” mode wherenext_video_samplereturnsOk(None)without further parsing.
Implementations§
Source§impl TsStreamingDemuxer
impl TsStreamingDemuxer
Sourcepub fn programs(&self) -> &[ProgramInfo]
pub fn programs(&self) -> &[ProgramInfo]
Every program the PAT advertised, in PAT order. Squad-37 multi- program API — useful for callers that want to enumerate channels in a multi-program transport (DVB / ATSC broadcast capture). For single-program files the slice has length 1.
Sourcepub fn active_program_index(&self) -> usize
pub fn active_program_index(&self) -> usize
Index of the currently active program (within programs()).
Sourcepub fn select_program(&mut self, program_number: u16) -> Result<()>
pub fn select_program(&mut self, program_number: u16) -> Result<()>
Switch the active program by PMT-side program_number. Resets the
per-AU walk state (pending PES bytes, PTS, encrypted-drop guard,
pixel-format detection) so the next next_video_sample call
starts cleanly on the new video PID. Returns Ok(()) on success
or an error if program_number is not in programs() or the
chosen program has no recognised video stream.
Audio is re-extracted from the new program’s first audio stream (if any). For single-program files (the common case) callers don’t need to touch this; the constructor already picked program 0 by default.
Trait Implementations§
Source§impl StreamingDemuxer for TsStreamingDemuxer
impl StreamingDemuxer for TsStreamingDemuxer
Source§fn header(&self) -> &DemuxHeader
fn header(&self) -> &DemuxHeader
DemuxHeader populated at
construction time.Source§fn next_video_sample(&mut self) -> Result<Option<Sample>>
fn next_video_sample(&mut self) -> Result<Option<Sample>>
Ok(None) at EOF.
Allocates a fresh Vec per sample; nothing is retained
internally beyond the reader’s per-format cursor state.