// g++ `pkg-config gstreamer-0.8 --libs --cflags` player.cpp -o player

#include <gst/gst.h>

int main(int argc, char *argv[])
{
    if(argc != 2) return 1;

    gst_init(&argc, &argv);

    GstElement *pipeline = gst_pipeline_new("pipeline");
    GstElement *source   = gst_element_factory_make("filesrc", "source");
    GstElement *decoder  = gst_element_factory_make("spider",  "decoder");
    GstElement *sink     = gst_element_factory_make("osssink", "sink");

    gst_bin_add_many(GST_BIN(pipeline), source, decoder, sink, 0);
    gst_element_link_many(source, decoder, sink, 0);

    g_object_set(G_OBJECT(source), "location", argv[1], 0);
    gst_element_set_state(pipeline, GST_STATE_PLAYING);

    while(gst_bin_iterate(GST_BIN(pipeline))) {}

    gst_element_set_state(pipeline, GST_STATE_NULL);
    gst_object_unref(GST_OBJECT(pipeline));

    return 0;
}

