mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-06-26 18:10:39 +00:00
It has nothing to do with tokio anymore with the newer futures version, tokio would only come in if actual tokio API (e.g. for sockets) is used.
61 lines
1.6 KiB
Rust
61 lines
1.6 KiB
Rust
extern crate gstreamer as gst;
|
|
use gst::prelude::*;
|
|
|
|
extern crate futures;
|
|
use futures::executor::block_on;
|
|
use futures::prelude::*;
|
|
|
|
use std::env;
|
|
|
|
#[path = "../examples-common.rs"]
|
|
mod examples_common;
|
|
|
|
fn example_main() {
|
|
let pipeline_str = env::args().collect::<Vec<String>>()[1..].join(" ");
|
|
|
|
gst::init().unwrap();
|
|
|
|
let pipeline = gst::parse_launch(&pipeline_str).unwrap();
|
|
let bus = pipeline.get_bus().unwrap();
|
|
|
|
let ret = pipeline.set_state(gst::State::Playing);
|
|
assert_ne!(ret, gst::StateChangeReturn::Failure);
|
|
|
|
let messages = gst::BusStream::new(&bus)
|
|
.for_each(|msg| {
|
|
use gst::MessageView;
|
|
|
|
let quit = match msg.view() {
|
|
MessageView::Eos(..) => true,
|
|
MessageView::Error(err) => {
|
|
println!(
|
|
"Error from {:?}: {} ({:?})",
|
|
err.get_src().map(|s| s.get_path_string()),
|
|
err.get_error(),
|
|
err.get_debug()
|
|
);
|
|
true
|
|
}
|
|
_ => false,
|
|
};
|
|
|
|
if quit {
|
|
Err(())
|
|
} else {
|
|
Ok(())
|
|
}
|
|
})
|
|
.and_then(|_| Ok(()));
|
|
|
|
let _ = block_on(messages);
|
|
|
|
let ret = pipeline.set_state(gst::State::Null);
|
|
assert_ne!(ret, gst::StateChangeReturn::Failure);
|
|
}
|
|
|
|
fn main() {
|
|
// tutorials_common::run is only required to set up the application environent on macOS
|
|
// (but not necessary in normal Cocoa applications where this is set up autmatically)
|
|
examples_common::run(example_main);
|
|
}
|