pub trait PlayerBackend: Send + Sync {
Show 14 methods
// Required methods
fn load(&mut self, media: &MediaItem) -> Result<(), PlayerError>;
fn play(&mut self) -> Result<(), PlayerError>;
fn pause(&mut self) -> Result<(), PlayerError>;
fn stop(&mut self) -> Result<(), PlayerError>;
fn seek(&mut self, position: f64) -> Result<(), PlayerError>;
fn set_volume(&mut self, volume: f32) -> Result<(), PlayerError>;
fn position(&self) -> f64;
fn duration(&self) -> Option<f64>;
fn state(&self) -> PlayerState;
fn volume(&self) -> f32;
// Provided methods
fn set_audio_settings(
&mut self,
_settings: &AudioSettings,
) -> Result<(), PlayerError> { ... }
fn audio_settings(&self) -> AudioSettings { ... }
fn set_audio_track(&mut self, _stream_index: i32) -> Result<(), PlayerError> { ... }
fn set_subtitle_track(
&mut self,
_stream_index: Option<i32>,
) -> Result<(), PlayerError> { ... }
}Expand description
Player backend trait - implemented by platform-specific players
TRACES: UR-003, UR-004 | IR-003, IR-004 | DR-004
Required Methods§
Sourcefn load(&mut self, media: &MediaItem) -> Result<(), PlayerError>
fn load(&mut self, media: &MediaItem) -> Result<(), PlayerError>
Load a media item for playback TRACES: UR-005
Sourcefn play(&mut self) -> Result<(), PlayerError>
fn play(&mut self) -> Result<(), PlayerError>
Start or resume playback TRACES: UR-005
Sourcefn pause(&mut self) -> Result<(), PlayerError>
fn pause(&mut self) -> Result<(), PlayerError>
Pause playback TRACES: UR-005
Sourcefn stop(&mut self) -> Result<(), PlayerError>
fn stop(&mut self) -> Result<(), PlayerError>
Stop playback and unload media TRACES: UR-005
Sourcefn seek(&mut self, position: f64) -> Result<(), PlayerError>
fn seek(&mut self, position: f64) -> Result<(), PlayerError>
Seek to a position in seconds TRACES: UR-005
Sourcefn set_volume(&mut self, volume: f32) -> Result<(), PlayerError>
fn set_volume(&mut self, volume: f32) -> Result<(), PlayerError>
Set volume (0.0 - 1.0) TRACES: UR-016
Sourcefn state(&self) -> PlayerState
fn state(&self) -> PlayerState
Get current player state
Provided Methods§
Sourcefn set_audio_settings(
&mut self,
_settings: &AudioSettings,
) -> Result<(), PlayerError>
fn set_audio_settings( &mut self, _settings: &AudioSettings, ) -> Result<(), PlayerError>
Apply audio settings (crossfade, gapless, normalization)
@req-partial: UR-031 (Linux only) - Crossfade between audio tracks @req-partial: UR-032 (Linux only) - Gapless playback for seamless album listening @req-partial: UR-033 (Linux only) - Volume normalization to prevent volume jumps @req: DR-034 - Crossfade engine with configurable duration (0-12s) @req: DR-035 - Gapless playback between sequential tracks @req: DR-036 - Volume normalization with preset levels (Loud/Normal/Quiet)
Sourcefn audio_settings(&self) -> AudioSettings
fn audio_settings(&self) -> AudioSettings
Get current audio settings
@req: DR-034 - Crossfade engine @req: DR-035 - Gapless playback @req: DR-036 - Volume normalization
Sourcefn set_audio_track(&mut self, _stream_index: i32) -> Result<(), PlayerError>
fn set_audio_track(&mut self, _stream_index: i32) -> Result<(), PlayerError>
Set the active audio track by stream index
Overridden by the Android (ExoPlayer) backend. MpvBackend deliberately
does not override it — MPV is the audio-only backend here, so it keeps
this not_implemented() default and the Linux video path switches track by
re-opening the stream instead (player_switch_audio_track).
TRACES: UR-021 | IR-019, DR-024
Sourcefn set_subtitle_track(
&mut self,
_stream_index: Option<i32>,
) -> Result<(), PlayerError>
fn set_subtitle_track( &mut self, _stream_index: Option<i32>, ) -> Result<(), PlayerError>
Set the active subtitle track by stream index (None to disable subtitles)
Overridden by the Android (ExoPlayer) backend. MpvBackend deliberately
does not override it, so it keeps this not_implemented() default;
the Linux video path renders subtitles as <track> children of the
WebKitGTK HTML5 <video> element and never calls this.
TRACES: UR-020 | IR-018, DR-023
Trait Implementations§
Source§impl PlayerBackend for Box<dyn PlayerBackend>
Forward the trait through a box.
impl PlayerBackend for Box<dyn PlayerBackend>
Forward the trait through a box.
Box<dyn PlayerBackend> does not implement PlayerBackend on its own, so
without this the boxed engine built at the composition root cannot be handed
to anything generic over the trait — LegacyPlayer in particular.
Source§fn load(&mut self, media: &MediaItem) -> Result<(), PlayerError>
fn load(&mut self, media: &MediaItem) -> Result<(), PlayerError>
Source§fn seek(&mut self, position: f64) -> Result<(), PlayerError>
fn seek(&mut self, position: f64) -> Result<(), PlayerError>
Source§fn set_volume(&mut self, volume: f32) -> Result<(), PlayerError>
fn set_volume(&mut self, volume: f32) -> Result<(), PlayerError>
Source§fn state(&self) -> PlayerState
fn state(&self) -> PlayerState
Source§fn set_audio_settings(
&mut self,
settings: &AudioSettings,
) -> Result<(), PlayerError>
fn set_audio_settings( &mut self, settings: &AudioSettings, ) -> Result<(), PlayerError>
Source§fn audio_settings(&self) -> AudioSettings
fn audio_settings(&self) -> AudioSettings
Source§fn set_audio_track(&mut self, stream_index: i32) -> Result<(), PlayerError>
fn set_audio_track(&mut self, stream_index: i32) -> Result<(), PlayerError>
Source§fn set_subtitle_track(
&mut self,
stream_index: Option<i32>,
) -> Result<(), PlayerError>
fn set_subtitle_track( &mut self, stream_index: Option<i32>, ) -> Result<(), PlayerError>
Implementations on Foreign Types§
Source§impl PlayerBackend for Box<dyn PlayerBackend>
Forward the trait through a box.
impl PlayerBackend for Box<dyn PlayerBackend>
Forward the trait through a box.
Box<dyn PlayerBackend> does not implement PlayerBackend on its own, so
without this the boxed engine built at the composition root cannot be handed
to anything generic over the trait — LegacyPlayer in particular.