#[non_exhaustive]pub enum Error {
PlaylistNotUtf8(Utf8Error),
PlaylistParse(Error),
UnrequestedResource {
id: ResourceId,
},
InitNotYetAvailable {
id: ResourceId,
},
Demux {
id: ResourceId,
source: Error,
},
UriResolve {
uri: String,
base: String,
reason: &'static str,
},
ByteRangeOverflow {
url: String,
offset: u64,
length: u64,
},
}Expand description
Error variants crate::client::HlsClient can return.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
PlaylistNotUtf8(Utf8Error)
The playlist bytes fed to crate::client::HlsClient::on_playlist
are not valid UTF-8 (RFC 8216 §4.1 playlists are UTF-8 text).
PlaylistParse(Error)
broadcast_hls::MediaPlaylist::parse rejected the playlist text (a
known tag with a missing/unparsable required attribute).
UnrequestedResource
crate::client::HlsClient::on_resource was fed bytes for a
crate::client::ResourceId the client never requested (a
caller/driver bug, or a stale/duplicate delivery after the client
already moved past it).
Fields
id: ResourceIdThe unexpected id.
InitNotYetAvailable
Defensive-only: a Part/Segment reached the demux step with no init
segment cached. In normal operation this cannot happen —
crate::client::HlsClient::on_resource buffers any Part/Segment
that arrives before the init segment and replays it once the init is
delivered, so callers may complete fetches in any order.
Fields
id: ResourceIdThe id that could not be demuxed yet.
Demux
Demuxing the concatenation of the init segment + a fetched Part/Segment
resource (via transmux::Fmp4Demux) failed.
Fields
id: ResourceIdThe id whose bytes failed to demux.
UriResolve
A playlist URI (segment/part/map/rendition-report) could not be resolved against the playlist’s own URL.
Fields
ByteRangeOverflow
An EXT-X-BYTERANGE (or EXT-X-PRELOAD-HINT byte range,
RFC 8216bis §4.4.4.9/§4.4.5.3) offset + length overflowed u64.
Both values come straight from the remote origin’s playlist text —
broadcast_hls::MediaPlaylist::parse places no upper bound on
either (confirmed: it is a bare str::parse::<u64>()) — so a
malicious or corrupt origin can advertise e.g.
BYTERANGE:18446744073709551615@0, or a chain of omitted-offset
ranges whose per-URL running cursor
(crate::client::HlsClient’s byte_range_cursor) accumulates past
u64::MAX. Rejected outright rather than saturating: a saturated
range would silently become a different, wrong byte range, and the
client would demux whatever bytes the origin happened to return for
it — a worse outcome than simply failing this one fetch.
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<Error> for TokioError
Available on crate feature tokio only.
impl From<Error> for TokioError
tokio only.