diff --git a/Cargo.toml b/Cargo.toml index d2d62dcc2..00eba1ca8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,5 @@ members = [ "gstreamer-player", "gstreamer-video", "examples", + "tutorials", ] diff --git a/tutorials/Cargo.toml b/tutorials/Cargo.toml new file mode 100644 index 000000000..c06272810 --- /dev/null +++ b/tutorials/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "tutorials" +version = "0.9.0" +authors = ["Sebastian Dröge "] + +[dependencies] +glib = { version = "0.3", git = "https://github.com/gtk-rs/glib" } +gstreamer = { path = "../gstreamer" } + +[badges] +travis-ci = { repository = "sdroege/gstreamer-rs", branch = "master" } diff --git a/tutorials/src/bin/basic-tutorial-1.rs b/tutorials/src/bin/basic-tutorial-1.rs new file mode 100644 index 000000000..19fec3c8f --- /dev/null +++ b/tutorials/src/bin/basic-tutorial-1.rs @@ -0,0 +1,42 @@ +extern crate gstreamer as gst; +use gst::prelude::*; + +use std::u64; + +fn main() { + gst::init().unwrap(); + + let uri = "https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm"; + let pipeline = gst::parse_launch(&format!("playbin uri={}", uri)).unwrap(); + + let ret = pipeline.set_state(gst::State::Playing); + assert_ne!(ret, gst::StateChangeReturn::Failure); + + let bus = pipeline.get_bus().unwrap(); + + loop { + use gst::MessageView; + + let msg = match bus.timed_pop(u64::MAX) { + None => break, + Some(msg) => msg, + }; + + match msg.view() { + MessageView::Eos(..) => break, + MessageView::Error(err) => { + println!( + "Error from {}: {} ({:?})", + msg.get_src().get_path_string(), + err.get_error(), + err.get_debug() + ); + break; + } + _ => (), + } + } + + let ret = pipeline.set_state(gst::State::Null); + assert_ne!(ret, gst::StateChangeReturn::Failure); +}