Allow simultaneous playback of audio and video for getUserMedia

This commit is contained in:
Fernando Jiménez Moreno 2019-05-27 19:01:31 +02:00
parent 2a61a0dbb0
commit dfbf7e37ab
2 changed files with 19 additions and 18 deletions

20
Cargo.lock generated
View file

@ -3995,7 +3995,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media" name = "servo-media"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"servo-media-audio 0.1.0 (git+https://github.com/servo/media)", "servo-media-audio 0.1.0 (git+https://github.com/servo/media)",
"servo-media-player 0.1.0 (git+https://github.com/servo/media)", "servo-media-player 0.1.0 (git+https://github.com/servo/media)",
@ -4006,7 +4006,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-audio" name = "servo-media-audio"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4022,7 +4022,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-dummy" name = "servo-media-dummy"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4036,7 +4036,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer" name = "servo-media-gstreamer"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4070,7 +4070,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer-render" name = "servo-media-gstreamer-render"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"gstreamer 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "gstreamer 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gstreamer-video 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "gstreamer-video 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4080,7 +4080,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-gstreamer-render-unix" name = "servo-media-gstreamer-render-unix"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"glib 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "glib 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gstreamer 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "gstreamer 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4093,7 +4093,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-player" name = "servo-media-player"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"ipc-channel 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4104,7 +4104,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-streams" name = "servo-media-streams"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4113,7 +4113,7 @@ dependencies = [
[[package]] [[package]]
name = "servo-media-webrtc" name = "servo-media-webrtc"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@ -4212,7 +4212,7 @@ dependencies = [
[[package]] [[package]]
name = "servo_media_derive" name = "servo_media_derive"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/media#ecd5a7c6e4f51c5409321649dfb4a387bbd41925" source = "git+https://github.com/servo/media#2dabf1ab7e3b6d3b6764eebdf8855431367752c4"
dependencies = [ dependencies = [
"proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",

View file

@ -846,13 +846,14 @@ impl HTMLMediaElement {
self.fetch_request(None); self.fetch_request(None);
}, },
SrcObject::MediaStream(ref stream) => { SrcObject::MediaStream(ref stream) => {
for stream in &*stream.get_tracks() { let tracks = &*stream.get_tracks();
for (pos, track) in tracks.iter().enumerate() {
if let Err(_) = self if let Err(_) = self
.player .player
.borrow() .borrow()
.as_ref() .as_ref()
.unwrap() .unwrap()
.set_stream(&stream.id()) .set_stream(&track.id(), pos == tracks.len() - 1)
{ {
self.queue_dedicated_media_source_failure_steps(); self.queue_dedicated_media_source_failure_steps();
} }
@ -1222,13 +1223,13 @@ impl HTMLMediaElement {
_ => StreamType::Seekable, _ => StreamType::Seekable,
}; };
let player = ServoMedia::get()
.unwrap()
.create_player(stream_type, Box::new(PlayerContextDummy()));
let (action_sender, action_receiver) = ipc::channel().unwrap(); let (action_sender, action_receiver) = ipc::channel().unwrap();
player.register_event_handler(action_sender); let player = ServoMedia::get().unwrap().create_player(
player.register_frame_renderer(self.frame_renderer.clone()); stream_type,
action_sender,
Some(self.frame_renderer.clone()),
Box::new(PlayerContextDummy()),
);
*self.player.borrow_mut() = Some(player); *self.player.borrow_mut() = Some(player);