Skip to content

Instantly share code, notes, and snippets.

@sdroege
Last active February 13, 2020 06:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sdroege/46868640122e373c814b593652878f79 to your computer and use it in GitHub Desktop.
Save sdroege/46868640122e373c814b593652878f79 to your computer and use it in GitHub Desktop.
playbin.rs
extern crate gstreamer as gst;
use gst::*;
extern crate glib;
use glib::*;
use glib::ObjectExt;
use std::env;
use std::u64;
fn main() {
gst::init().unwrap();
let args: Vec<_> = env::args().collect();
let uri: &str = if args.len() == 2 {
args[1].as_ref()
} else {
panic!("Usage: playbin uri");
};
let playbin = gst::ElementFactory::make("playbin", None).unwrap();
playbin.set_property("uri", &Value::from(uri)).unwrap();
// For flags handling
let flags = playbin.get_property("flags").unwrap();
let flags_class = FlagsClass::new(flags.type_()).unwrap();
let flags = flags_class.builder_with_value(flags).unwrap()
.unset_by_nick("text")
.unset_by_nick("video")
.build()
.unwrap();
playbin.set_property("flags", &flags).unwrap();
let bus = playbin.get_bus().unwrap();
let ret = playbin.set_state(gst::State::Playing);
assert_ne!(ret, gst::StateChangeReturn::Failure);
loop {
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 = playbin.set_state(gst::State::Null);
assert_ne!(ret, gst::StateChangeReturn::Failure);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment