servo_media_player/
lib.rs1use std::ops::Range;
6use std::time::Duration;
7
8pub extern crate ipc_channel;
9extern crate servo_media_streams as streams;
10extern crate servo_media_traits;
11
12pub mod audio;
13pub mod context;
14pub mod metadata;
15pub mod video;
16
17use ipc_channel::ipc::{self, IpcSender};
18use serde::{Deserialize, Serialize};
19use servo_media_traits::MediaInstance;
20use streams::registry::MediaStreamId;
21
22#[derive(Clone, Debug, Deserialize, Serialize)]
23pub enum PlaybackState {
24 Stopped,
25 Buffering,
26 Paused,
27 Playing,
28}
29
30#[derive(Debug, PartialEq)]
31pub enum PlayerError {
32 Backend(String),
34 BufferPushFailed,
36 EnoughData,
38 EOSFailed,
40 NonSeekableStream,
42 SeekOutOfRange,
44 SetStreamFailed,
47 SetTrackFailed,
49}
50
51pub type SeekLockMsg = (bool, IpcSender<()>);
52
53#[derive(Clone, Debug, Deserialize, Serialize)]
54pub struct SeekLock {
55 pub lock_channel: IpcSender<SeekLockMsg>,
56}
57
58impl SeekLock {
59 pub fn unlock(&self, result: bool) {
60 let (ack_sender, ack_recv) = ipc::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_playback_rate(&self, playback_rate: f64) -> Result<(), PlayerError>;
113 fn playback_rate(&self) -> f64;
114 fn push_data(&self, data: Vec<u8>) -> Result<(), PlayerError>;
115 fn end_of_stream(&self) -> Result<(), PlayerError>;
116 fn buffered(&self) -> Vec<Range<f64>>;
118 fn set_stream(&self, stream: &MediaStreamId, only_stream: bool) -> Result<(), PlayerError>;
128 fn render_use_gl(&self) -> bool;
130 fn set_audio_track(&self, stream_index: i32, enabled: bool) -> Result<(), PlayerError>;
131 fn set_video_track(&self, stream_index: i32, enabled: bool) -> Result<(), PlayerError>;
132}