servo_media_player/
lib.rs1use std::ops::Range;
6use std::time::Duration;
7
8extern crate servo_media_streams as streams;
9extern crate servo_media_traits;
10
11pub mod audio;
12pub mod context;
13pub mod metadata;
14pub mod video;
15
16use serde::{Deserialize, Serialize};
17use servo_base::generic_channel::{self, GenericSender};
18use servo_media_traits::MediaInstance;
19use streams::registry::MediaStreamId;
20
21#[derive(Clone, Debug, Deserialize, Serialize)]
22pub enum PlaybackState {
23 Stopped,
24 Buffering,
25 Paused,
26 Playing,
27}
28
29#[derive(Debug, PartialEq)]
30pub enum PlayerError {
31 Backend(String),
33 BufferPushFailed,
35 EnoughData,
37 EOSFailed,
39 NonSeekableStream,
41 SeekOutOfRange,
43 SetStreamFailed,
46 SetTrackFailed,
48}
49
50pub type SeekLockMsg = (bool, GenericSender<()>);
51
52#[derive(Clone, Debug, Deserialize, Serialize)]
53pub struct SeekLock {
54 pub lock_channel: GenericSender<SeekLockMsg>,
55}
56
57impl SeekLock {
58 pub fn unlock(&self, result: bool) {
59 let (ack_sender, ack_recv) =
60 generic_channel::channel::<()>().expect("Could not create IPC channel");
61 self.lock_channel.send((result, ack_sender)).unwrap();
62 ack_recv.recv().unwrap()
63 }
64}
65
66#[derive(Clone, Debug, Deserialize, Serialize)]
67pub enum PlayerEvent {
68 EndOfStream,
69 EnoughData,
71 Error(String),
72 VideoFrameUpdated,
73 MetadataUpdated(metadata::Metadata),
74 DurationChanged(Option<Duration>),
76 NeedData,
79 PositionChanged(f64),
80 SeekData(u64, SeekLock),
86 SeekDone(f64),
88 StateChanged(PlaybackState),
89}
90
91#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
92pub enum StreamType {
93 Stream,
95 Seekable,
97}
98
99pub trait Player: Send + MediaInstance {
100 fn play(&self) -> Result<(), PlayerError>;
101 fn pause(&self) -> Result<(), PlayerError>;
102 fn paused(&self) -> bool;
103 fn can_resume(&self) -> bool;
104 fn stop(&self) -> Result<(), PlayerError>;
105 fn seek(&self, time: f64) -> Result<(), PlayerError>;
106 fn seekable(&self) -> Vec<Range<f64>>;
107 fn set_mute(&self, muted: bool) -> Result<(), PlayerError>;
108 fn muted(&self) -> bool;
109 fn set_volume(&self, volume: f64) -> Result<(), PlayerError>;
110 fn volume(&self) -> f64;
111 fn set_input_size(&self, size: u64) -> Result<(), PlayerError>;
112 fn set_seekable(&self, seekable: bool) -> Result<(), PlayerError>;
113 fn set_playback_rate(&self, playback_rate: f64) -> Result<(), PlayerError>;
114 fn playback_rate(&self) -> f64;
115 fn push_data(&self, data: Vec<u8>) -> Result<(), PlayerError>;
116 fn end_of_stream(&self) -> Result<(), PlayerError>;
117 fn buffered(&self) -> Vec<Range<f64>>;
119 fn set_stream(&self, stream: &MediaStreamId, only_stream: bool) -> Result<(), PlayerError>;
129 fn render_use_gl(&self) -> bool;
131 fn set_audio_track(&self, stream_index: i32, enabled: bool) -> Result<(), PlayerError>;
132 fn set_video_track(&self, stream_index: i32, enabled: bool) -> Result<(), PlayerError>;
133}