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
//! Sans-IO Smooth Streaming (MS-SSTR) client engine (issue #2370).
//!
//! One engine owns everything a Smooth pull client does between bytes: manifest
//! fetch and live refresh, `<Protection>` refusal, `StreamIndex` identity across a
//! refresh, stream/quality selection, chunk enumeration, fragment URL resolution,
//! first-fragment track-id discovery, the synthetic init segment, the `tfxd`
//! timestamp base, the encrypted-fragment probe, retry/backoff, live join
//! look-ahead and discontinuity. Manifest syntax is `broadcast-smooth`'s; codec
//! glue and fMP4 demux are `transmux`'s.
//!
//! The pull side is [`SmoothClient`]; the **serving** side is
//! [`server::SmoothOrigin`] (feature `std`), which renders a live Manifest from
//! a `media_plane::Trunk` and resolves fragment requests — the same split
//! `hls-runtime` makes between its client and its `server` module, with
//! `multimux` an adapter over it.
//!
//! The shape follows `dash-runtime`'s `DashClient`: the host drives it with
//! [`SmoothClient::poll`] (what to fetch next), [`SmoothClient::on_manifest`],
//! [`SmoothClient::on_fragment`] and [`SmoothClient::on_failure`], and drains
//! [`SmoothClient::next_output`]. Every instant is an argument in microseconds; no
//! I/O happens and no clock is read inside the crate.
//!
//! The wire syntax is MS-SSTR, transcribed in
//! `private/specs-verified/mpeg/transmux/smooth/ms-sstr.md`.
pub use ;
pub use SmoothError;
pub use ;