Files
netris-warp/gstreamer/src
2023-11-28 17:24:11 +03:00
..
2023-11-25 18:16:42 +03:00
2023-11-25 18:16:42 +03:00
2023-11-25 18:16:42 +03:00
2023-11-28 17:24:11 +03:00
2023-11-25 18:16:42 +03:00

To be used as follows:

use gst::prelude::*;

fn main() {
    // Initialize GStreamer
    gst::init().unwrap();

    // Create the elements
    let source = gst::ElementFactory::make("videotestsrc", Some("source")).unwrap();
    let encoder = gst::ElementFactory::make("x264enc", Some("encoder")).unwrap();
    let muxer = gst::ElementFactory::make("fmp4mux", Some("muxer")).unwrap();
    let sink = gst::ElementFactory::make("warpsink", Some("sink")).unwrap();

    // Create an empty pipeline
    let pipeline = gst::Pipeline::new(Some("pipeline"));

    // Build the pipeline
    pipeline.add_many(&[&source, &encoder, &muxer, &sink]).unwrap();
    gst::Element::link_many(&[&source, &encoder, &muxer, &sink]).unwrap();

    // Start playing
    pipeline.set_state(gst::State::Playing).unwrap();

    // Wait until error or EOS
    let bus = pipeline.bus().unwrap();
    for msg in bus.iter_timed(gst::CLOCK_TIME_NONE) {
        use gst::MessageView;

        match msg.view() {
            MessageView::Error(err) => {
                eprintln!(
                    "Error from {:?}: {} ({:?})",
                    err.src().map(|s| s.path_string()),
                    err.error(),
                    err.debug()
                );
                break;
            }
            MessageView::Eos(..) => break,
            _ => (),
        }
    }

    // Clean up
    pipeline.set_state(gst::State::Null).unwrap();
}