#include #include typedef struct { gboolean play; guint attempt; GstElement *bin; } Data; static gboolean tick (Data *data) { data->attempt++; g_print ("Attempt %d to change state", data->attempt); if (data->play) { g_print("State: READY->PLAYING\n"); gst_element_set_state (data->bin, GST_STATE_PLAYING); } else { g_print("State: PLAYING->READY\n"); gst_element_set_state (data->bin, GST_STATE_READY); } data->play = !data->play; return TRUE; } int main (int argc, char **argv) { GstElement *playbin; GstElement *gconf; GstElement *bin; GstElement *tee; GstElement *tcpserversink; Data *data; gst_init (&argc, &argv); /* Here is the layout: Playbin's Audiosink: -Bin -Tee - Gconf (alsa) - tcpserversink */ playbin = gst_element_factory_make ("playbin", "playbin"); //Change this to a file on your drive g_object_set (G_OBJECT (playbin), "uri", "file:///home/kikidonk/lone-music/iced.mp3", NULL); bin = gst_bin_new ("bin"); gconf = gst_gconf_get_default_audio_sink (); tee = gst_element_factory_make ("tee", "tee"); tcpserversink = gst_element_factory_make ("tcpserversink", "tcp"); g_object_set (G_OBJECT (tcpserversink), "port", 10333, "protocol", 1, NULL); gst_bin_add (GST_BIN (bin), gconf); gst_bin_add (GST_BIN (bin), tee); gst_bin_add (GST_BIN (bin), tcpserversink); gst_element_link (tee, gconf); gst_element_link (tee, tcpserversink); gst_element_add_ghost_pad (bin, gst_element_get_pad (tee, "sink"), "sink"); g_object_set (G_OBJECT (playbin), "audio-sink", bin, NULL); gst_element_set_state (playbin, GST_STATE_PLAYING); /* Every 2 sec, switch between PLAYING and READY state the playbin */ data = g_new0(Data, 1); data->play = FALSE; data->bin = playbin; data->attempt = 0; g_timeout_add (2000, (GSourceFunc) tick, data); /* Go ! */ gst_main (); gst_element_set_state (playbin, GST_STATE_NULL); gst_object_unref (GST_OBJECT (playbin)); g_free (data); return 0; }