Skip to main content

VideoVariantSpec

Struct VideoVariantSpec 

Source
pub struct VideoVariantSpec {
    pub width: u32,
    pub height: u32,
    pub frame_rate: f64,
    pub average_bandwidth_bps: u32,
    pub bandwidth_bps: u32,
    pub codec_string: String,
    pub supplemental_codecs: Option<String>,
    pub video_range: Option<&'static str>,
    pub relative_dir: String,
    pub manifest: CmafTrackManifest,
}
Expand description

Description of one video rendition for the master playlist.

Fields§

§width: u32

Frame width in pixels (post-scaling, what RESOLUTION= reports).

§height: u32

Frame height in pixels.

§frame_rate: f64

Source frame rate. FRAME-RATE= is formatted to 3 decimal places per Apple’s authoring spec (e.g. 29.970, 60.000).

§average_bandwidth_bps: u32

Average bitrate in bits per second. Goes in the AVERAGE-BANDWIDTH= attribute.

§bandwidth_bps: u32

Peak bitrate in bits per second — BANDWIDTH=. Per RFC 8216 §4.3.4.2 this is the largest single-segment bitrate observed (or, for VBR encoders without per-segment metering, the rendition’s nominal max_bitrate). Players use this for ABR switching headroom decisions.

§codec_string: String

AV1 codec string for the video track. Parse from the encoded bitstream via codec::codec_strings::av1_codec_string. Joined with the audio codec string in CODECS="...".

§supplemental_codecs: Option<String>

Optional SUPPLEMENTAL-CODECS attribute string. Per HLS-Authoring Spec §“Supplemental Codecs”, this carries an enhanced codec signalling that AUGMENTS the CODECS attribute — e.g. the dvh1.08.07/db4h form for Dolby Vision Profile 8 over an HEVC base layer.

For pure AV1 HDR there’s no base+enhancement model (the bitstream IS the HDR content), so the canonical pattern when HDR encode lands (Squad-22 dep) will be parallel SDR + HDR renditions in the master rather than supplemental signalling on a single variant. This field exists so that future supplemental-codec patterns (Dolby Vision over AV1 if/when that becomes a thing, AV2, etc.) can be wired in without a schema change.

Format when set: "<codec>/<compat>[/<compat>...]". None today; field is plumbed for forward compat.

§video_range: Option<&'static str>

VIDEO-RANGE attribute on the STREAM-INF. Per HLS spec, allowed values: “SDR” (default, omitted when at SDR), “HLG”, “PQ”. Set to Some("PQ") for HDR10 sources, Some("HLG") for HLG. None for SDR (omitted from output — HLS authors recommend omitting the attribute when at SDR rather than emitting VIDEO-RANGE=SDR explicitly).

§relative_dir: String

Relative directory under the asset root, e.g. "video/1080p". The variant’s playlist.m3u8 URI in the master is <relative_dir>/playlist.m3u8.

§manifest: CmafTrackManifest

CMAF track manifest produced by the segmenter. Source for the EXT-X-MAP URI + per-segment EXTINF durations.

Trait Implementations§

Source§

impl Clone for VideoVariantSpec

Source§

fn clone(&self) -> VideoVariantSpec

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VideoVariantSpec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more