1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//! Async/tokio stream adapters for DVB SI and T2-MI processing.
//!
//! This crate wraps the synchronous [`dvb_si::demux::SiDemux`] and
//! [`dvb_t2mi::pump::T2miPump`] as [`futures_core::Stream`] implementations,
//! quarantining `tokio` and `futures-core` away from the parser crates.
//!
//! # Streams
//!
//! - [`SectionStream`] — wraps [`dvb_si::demux::SiDemux`] over any
//! [`tokio::io::AsyncRead`] byte source (file, TCP socket). Each item is an
//! owned [`dvb_si::demux::SectionEvent`] (`'static`, no borrow of the read
//! buffer).
//!
//! - [`T2miEventStream`] — wraps [`dvb_t2mi::pump::T2miPump`] over any
//! [`tokio::io::AsyncRead`]. Each item is an owned
//! [`dvb_t2mi::pump::T2miEvent`].
//!
//! Both streams are also constructable from a UDP multicast socket (the dominant
//! real-world DVB transport) via the `bind_multicast` constructor when the `udp`
//! feature is enabled.
//!
//! # Ownership and cancellation
//!
//! The adapter **owns** the read buffer and feeds bytes into the synchronous pump
//! on each `poll_next` call. Events are buffered in a small per-packet queue and
//! drained before the next read is attempted. There are no internal tasks or
//! spawning; cancellation is simply dropping the stream.
//!
//! # 188-byte TS framing and resync
//!
//! The adapter reads raw bytes from the `AsyncRead` source and performs 188-byte
//! TS packet alignment via a sync-byte (`0x47`) resync on the read buffer. The
//! resync logic is implemented once in [`resync`] and shared by both streams.
//!
//! # Feature flags
//!
//! | Feature | Default | Description |
//! |---------|---------|-------------|
//! | `udp` | on | UDP/multicast constructors (`bind_multicast`) via `tokio::net::UdpSocket`. |
//!
//! # MSRV
//!
//! `dvb-stream` **1.81** (mirrors the workspace). This crate is versioned and
//! released **independently** from the `dvb-si` / `dvb-t2mi` lockstep because
//! tokio's own MSRV moves faster.
pub use SectionStream;
pub use T2miEventStream;
/// Statistics tracking resynchronisation events and discarded bytes in a TS
/// byte stream.
///
/// Returned by [`SectionStream::resync_stats`] and
/// [`T2miEventStream::resync_stats`].