servo_media_player/
lib.rs1use std::ops::Range;
6use std::time::Duration;
7
8pub extern crate ipc_channel;
9#[macro_use]
10extern crate serde_derive;
11extern crate servo_media_streams as streams;
12extern crate servo_media_traits;
13
14pub mod audio;
15pub mod context;
16pub mod metadata;
17pub mod video;
18
19use ipc_channel::ipc::{self, IpcSender};
20use servo_media_traits::MediaInstance;
21use streams::registry::MediaStreamId;
22
23#[derive(Clone, Debug, Deserialize, Serialize)]
24pub enum PlaybackState {
25 Stopped,
26 Buffering,
27 Paused,
28 Playing,
29}
30
31#[derive(Debug, PartialEq)]
32pub enum PlayerError {
33 Backend(String),
35 BufferPushFailed,
37 EnoughData,
39 EOSFailed,
41 NonSeekableStream,
43 SeekOutOfRange,
45 SetStreamFailed,
48 SetTrackFailed,
50}
51
52pub type SeekLockMsg = (bool, IpcSender<()>);
53
54#[derive(Clone, Debug, Deserialize, Serialize)]
55pub struct SeekLock {
56 pub lock_channel: IpcSender<SeekLockMsg>,
57}
58
59impl SeekLock {
60 pub fn unlock(&self, result: bool) {
61 let (ack_sender, ack_recv) = ipc::channel::<()>().expect("Could not create IPC channel");
62 self.lock_channel.send((result, ack_sender)).unwrap();
63 ack_recv.recv().unwrap()
64 }
65}
66
67#[derive(Clone, Debug, Deserialize, Serialize)]
68pub enum PlayerEvent {
69 EndOfStream,
70 EnoughData,
72 Error(String),
73 VideoFrameUpdated,
74 MetadataUpdated(metadata::Metadata),
75 DurationChanged(Option<Duration>),
77 NeedData,
80 PositionChanged(f64),
81 SeekData(u64, SeekLock),
87 SeekDone(f64),
89 StateChanged(PlaybackState),
90}
91
92#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
93pub enum StreamType {
94 Stream,
96 Seekable,
98}
99
100pub trait Player: Send + MediaInstance {
101 fn play(&self) -> Result<(), PlayerError>;
102 fn pause(&self) -> Result<(), PlayerError>;
103 fn paused(&self) -> bool;
104 fn can_resume(&self) -> bool;
105 fn stop(&self) -> Result<(), PlayerError>;
106 fn seek(&self, time: f64) -> Result<(), PlayerError>;
107 fn seekable(&self) -> Vec<Range<f64>>;
108 fn set_mute(&self, muted: bool) -> Result<(), PlayerError>;
109 fn muted(&self) -> bool;
110 fn set_volume(&self, volume: f64) -> Result<(), PlayerError>;
111 fn volume(&self) -> f64;
112 fn set_input_size(&self, size: u64) -> 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}