Skip to main content

Capabilities

Struct Capabilities 

Source
pub struct Capabilities {
    pub video: bool,
    pub audio_settings: bool,
    pub subtitle_switching: bool,
    pub audio_track_switching: bool,
    pub seeks_transcoded_in_place: bool,
}
Expand description

What an engine can do, so callers adapt without naming engines.

If a caller ever branches on which engine it holds, this struct is missing something — add it here rather than sniffing. Engine identity leaking into callers is the coupling DR-238 came from.

Fields§

§video: bool

The engine renders pictures, not only sound.

§audio_settings: bool

Audio settings (EQ, normalisation, gapless) are honoured.

§subtitle_switching: bool

Subtitle tracks can be selected without re-opening.

§audio_track_switching: bool

Audio tracks can be selected without re-opening.

§seeks_transcoded_in_place: bool

A server-side transcode can be seeked without re-opening the stream.

True for hls.js, which seeks within the VOD playlist it is handed and lets the server catch up. False for mpv, whose HLS demuxer cannot make the server transcode from a new offset.

Declared by the engine rather than inferred by the caller. The previous design decided this from is_hls and use_html5 in a command handler — on behalf of engines it did not own — which is how “who renders” came to mean “how do I seek” and why a transcoded seek silently did nothing the moment native video changed the renderer (DR-238).

Re-negotiating a stream needs the repository, which sits above the engine, so the engine states the capability and the caller acts on it.

Implementations§

Source§

impl Capabilities

Source

pub fn mpv() -> Self

mpv.

Cannot seek a server-side transcode in place: its HLS demuxer will not make the server produce segments from a new offset, so the stream has to be re-opened.

Source

pub fn exoplayer() -> Self

ExoPlayer.

Can seek a transcode in place. It is a full HLS client, so like hls.js it seeks within the VOD playlist it was handed and lets the server catch up. Grouping it with mpv as “a native engine” gets this exactly backwards — being native is not the property that matters here, speaking HLS is, and that is the whole reason this is declared per engine rather than inferred from a category.

Source

pub fn webview() -> Self

An engine that renders through the webview element, where hls.js seeks within the playlist it was handed.

Trait Implementations§

Source§

impl Clone for Capabilities

Source§

fn clone(&self) -> Capabilities

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 Capabilities

Source§

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

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Capabilities

Source§

fn eq(&self, other: &Capabilities) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Capabilities

Source§

impl Eq for Capabilities

Source§

impl StructuralPartialEq for Capabilities

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
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> UserEvent for T
where T: Debug + Clone + Send + 'static,