<p>Hi<br>I try to use ffmpeg plugin to play wma music file and it works. See my code.</p>
<p>But at the end of stream, it gives a error message: internal data stream error.</p>
<p>I don&#39;t know why. Can you help me? Thank you!</p>
<p><br>gcc -Wall `pkg-config --cflags --libs gstreamer-0.10` player.c -o player</p>
<p>#include &lt;gst/gst.h&gt; </p>
<p>GstElement *pipeline, *source, *parser, *decoder, *conv, *sink;</p>
<p>static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)<br>{<br>&nbsp; GMainLoop *loop = data;</p>
<p>&nbsp; switch (GST_MESSAGE_TYPE (msg)) <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; case GST_MESSAGE_EOS:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_print (&quot;End-of-stream\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_main_loop_quit (loop);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; case GST_MESSAGE_ERROR: <br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gchar *debug;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GError *err;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gst_message_parse_error (msg, &amp;err, &amp;debug);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_free (debug);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_print (&quot;Error: %s\n&quot;, err-&gt;message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_error_free (err);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_main_loop_quit (loop);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp; }</p>
<p>&nbsp; return TRUE;<br>}</p>
<p>static void new_pad (GstElement *element, GstPad *pad, gpointer data)<br>{<br>&nbsp; GstPad *sinkpad;<br>&nbsp; g_print (&quot;Dynamic pad created, linking parser/decoder\n&quot;);</p>
<p>&nbsp; sinkpad = gst_element_get_pad (decoder, &quot;sink&quot;);<br>&nbsp; gst_pad_link (pad, sinkpad);</p>
<p>&nbsp; gst_object_unref (sinkpad);<br>}</p>
<p>int main (int&nbsp;&nbsp; argc, char *argv[])<br>{<br>&nbsp; GMainLoop *loop;<br>&nbsp; GstBus *bus;</p>
<p>&nbsp; /* initialize GStreamer */<br>&nbsp; gst_init (&amp;argc, &amp;argv);<br>&nbsp; loop = g_main_loop_new (NULL, FALSE);</p>
<p>&nbsp; /* check input arguments */<br>&nbsp; if (argc != 2) {<br>&nbsp;&nbsp;&nbsp; g_print (&quot;Usage: %s &lt;wma filename&gt;\n&quot;, argv[0]);<br>&nbsp;&nbsp;&nbsp; return -1;<br>&nbsp; }</p>
<p>&nbsp; /* create elements */<br>&nbsp; pipeline = gst_pipeline_new (&quot;audio-player&quot;);<br>&nbsp; source = gst_element_factory_make (&quot;filesrc&quot;, &quot;file-source&quot;);<br>&nbsp; parser = gst_element_factory_make (&quot;ffdemux_asf&quot;, &quot;asf-parser&quot;);
<br>&nbsp; decoder = gst_element_factory_make (&quot;ffdec_wmav2&quot;, &quot;wmav2-decoder&quot;);<br>&nbsp; conv = gst_element_factory_make (&quot;audioconvert&quot;, &quot;converter&quot;);<br>&nbsp; sink = gst_element_factory_make (&quot;alsasink&quot;, &quot;alsa-output&quot;);
<br>&nbsp; if (!pipeline || !source || !parser || !decoder || !conv || !sink) {<br>&nbsp;&nbsp;&nbsp; g_print (&quot;One element could not be created\n&quot;);<br>&nbsp;&nbsp;&nbsp; return -1;<br>&nbsp; }</p>
<p>&nbsp; g_object_set (G_OBJECT (source), &quot;location&quot;, argv[1], NULL);</p>
<p>&nbsp; bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<br>&nbsp; gst_bus_add_watch (bus, bus_call, loop);<br>&nbsp; gst_object_unref (bus);</p>
<p>&nbsp; gst_bin_add_many (GST_BIN (pipeline),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; source, parser, decoder, conv, sink, NULL);</p>
<p>&nbsp; gst_element_link (source, parser);<br>&nbsp; gst_element_link_many (decoder, conv, sink, NULL);<br>&nbsp; g_signal_connect (parser, &quot;pad-added&quot;, G_CALLBACK (new_pad), NULL);</p>
<p>&nbsp; g_print (&quot;Setting to PLAYING\n&quot;);<br>&nbsp; gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>&nbsp; g_print (&quot;Running\n&quot;);<br>&nbsp; g_main_loop_run (loop);</p>
<p>&nbsp; g_print (&quot;Returned, stopping playback\n&quot;);<br>&nbsp; gst_element_set_state (pipeline, GST_STATE_NULL);<br>&nbsp; g_print (&quot;Deleting pipeline\n&quot;);<br>&nbsp; gst_object_unref (GST_OBJECT (pipeline));</p>
<p>&nbsp; return 0;<br>}<br></p>