From 47a04414e7374b077f61f68a0c076c78ef55c2c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 27 Sep 2018 19:23:08 +0200 Subject: [PATCH 1/4] Go back to 1.14 binaries installed at /root/gstreamer --- .travis.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5d3e937a..caeccdee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,13 +17,13 @@ services: before_install: - curl -L https://github.com/ferjm/gstreamer-1.14.1-ubuntu-trusty/raw/master/gstreamer_.tar.gz | tar xz - - mv gstreamer /tmp/ - - export PKG_CONFIG_PATH=/tmp/gstreamer/lib/x86_64-linux-gnu/pkgconfig - - export GST_PLUGIN_SYSTEM_PATH=$GST_PLUGIN_SYSTEM_PATH:/usr/lib/x86_64-linux-gnu/gstreamer-1.0:/tmp/gstreamer/lib/x86_64-linux-gnu/gstreamer-1.0 - - export GST_PLUGIN_SCANNER=/tmp/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner - - export PATH=$PATH:/tmp/gstreamer/bin - - export LD_LIBRARY_PATH=/tmp/gstreamer/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH - - GST_REGISTRY_FORK=no /tmp/gstreamer/bin/gst-inspect-1.0 audiotestsrc + - sed -i "s;prefix=/root/gstreamer;prefix=$PWD/gstreamer;g" $PWD/gstreamer/lib/x86_64-linux-gnu/pkgconfig/*.pc + - export PKG_CONFIG_PATH=$PWD/gstreamer/lib/x86_64-linux-gnu/pkgconfig + - export GST_PLUGIN_SYSTEM_PATH=$GST_PLUGIN_SYSTEM_PATH:/usr/lib/x86_64-linux-gnu/gstreamer-1.0:$PWD/gstreamer/lib/x86_64-linux-gnu/gstreamer-1.0 + - export GST_PLUGIN_SCANNER=$PWD/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner + - export PATH=$PATH:$PWD/gstreamer/bin + - export LD_LIBRARY_PATH=$PWD/gstreamer/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + - GST_REGISTRY_FORK=no gstreamer/bin/gst-inspect-1.0 - export DISPLAY=:99.0; - /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1400x900x24 -ac +extension GLX +render -noreset; From 6aa864985ab483e5177b61578015ba34b439208f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 27 Sep 2018 19:46:31 +0200 Subject: [PATCH 2/4] Add simple player example --- examples/Cargo.toml | 4 ++ examples/simple_player.rs | 113 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 examples/simple_player.rs diff --git a/examples/Cargo.toml b/examples/Cargo.toml index ba330f3e..a1e8b213 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -66,3 +66,7 @@ path = "play_noise.rs" [[bin]] name = "player" path = "player/main.rs" + +[[bin]] +name = "simple_player" +path = "simple_player.rs" diff --git a/examples/simple_player.rs b/examples/simple_player.rs new file mode 100644 index 00000000..b6ed3ace --- /dev/null +++ b/examples/simple_player.rs @@ -0,0 +1,113 @@ +extern crate ipc_channel; +extern crate servo_media; + +use ipc_channel::ipc; +use servo_media::player::PlayerEvent; +use servo_media::ServoMedia; +use std::env; +use std::error::Error; +use std::fs::File; +use std::io::BufReader; +use std::io::Read; +use std::path::Path; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::{Arc, Mutex}; +use std::thread; + +fn run_example(servo_media: Arc) { + let player = Arc::new(Mutex::new(servo_media.create_player().unwrap())); + let args: Vec<_> = env::args().collect(); + let default = "./examples/resources/viper_cut.ogg"; + let filename: &str = if args.len() == 2 { + args[1].as_ref() + } else if Path::new(default).exists() { + default + } else { + panic!("Usage: cargo run --bin player ") + }; + + let (sender, receiver) = ipc::channel().unwrap(); + player.lock().unwrap().register_event_handler(sender); + + let path = Path::new(filename); + let display = path.display(); + + let file = match File::open(&path) { + Err(why) => panic!("couldn't open {}: {}", display, why.description()), + Ok(file) => file, + }; + + if let Ok(metadata) = file.metadata() { + player.lock().unwrap().set_input_size(metadata.len()); + } + + player + .lock() + .unwrap() + .setup() + .expect("couldn't setup player"); + + let player_clone = Arc::clone(&player); + let shutdown = Arc::new(AtomicBool::new(false)); + let shutdown_clone = shutdown.clone(); + let t = thread::spawn(move || { + let player = &player_clone; + let mut buf_reader = BufReader::new(file); + let mut buffer = [0; 8192]; + while !shutdown_clone.load(Ordering::Relaxed) { + match buf_reader.read(&mut buffer[..]) { + Ok(0) => { + println!("finished pushing data"); + break; + } + Ok(size) => { + if let Err(_) = player + .lock() + .unwrap() + .push_data(Vec::from(&buffer[0..size])) + { + break; + } + } + Err(e) => { + eprintln!("Error: {}", e); + break; + } + } + } + }); + + player.lock().unwrap().play(); + + while let Ok(event) = receiver.recv() { + match event { + PlayerEvent::EndOfStream => { + println!("EOF"); + break; + } + PlayerEvent::Error => { + println!("Error"); + break; + } + PlayerEvent::MetadataUpdated(ref m) => { + println!("Metadata updated! {:?}", m); + } + PlayerEvent::StateChanged(ref s) => { + println!("Player state changed to {:?}", s); + } + PlayerEvent::FrameUpdated => eprint!("."), + } + } + + shutdown.store(true, Ordering::Relaxed); + let _ = t.join(); + + player.lock().unwrap().stop(); +} + +fn main() { + if let Ok(servo_media) = ServoMedia::get() { + run_example(servo_media); + } +} + From 5740fc70a119698208d274ea2efc4bcd71f5aef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 27 Sep 2018 22:45:16 +0200 Subject: [PATCH 3/4] Remove gst registry workaround --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index caeccdee..8d71a9f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,6 @@ before_install: - export GST_PLUGIN_SCANNER=$PWD/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner - export PATH=$PATH:$PWD/gstreamer/bin - export LD_LIBRARY_PATH=$PWD/gstreamer/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH - - GST_REGISTRY_FORK=no gstreamer/bin/gst-inspect-1.0 - export DISPLAY=:99.0; - /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1400x900x24 -ac +extension GLX +render -noreset; From 629cb8b4e25130748d1feef43fecd5a5484fc390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Fri, 28 Sep 2018 17:04:36 +0200 Subject: [PATCH 4/4] Get binaries from S3 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8d71a9f7..e114fe29 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ services: - pulseaudio before_install: - - curl -L https://github.com/ferjm/gstreamer-1.14.1-ubuntu-trusty/raw/master/gstreamer_.tar.gz | tar xz + - curl -L http://servo-deps.s3.amazonaws.com/gstreamer/gstreamer-x86_64-linux-gnu.tar.gz | tar xz - sed -i "s;prefix=/root/gstreamer;prefix=$PWD/gstreamer;g" $PWD/gstreamer/lib/x86_64-linux-gnu/pkgconfig/*.pc - export PKG_CONFIG_PATH=$PWD/gstreamer/lib/x86_64-linux-gnu/pkgconfig - export GST_PLUGIN_SYSTEM_PATH=$GST_PLUGIN_SYSTEM_PATH:/usr/lib/x86_64-linux-gnu/gstreamer-1.0:$PWD/gstreamer/lib/x86_64-linux-gnu/gstreamer-1.0