Hi all: I try to replace audio
sink as following, but failed, could you give me some advice /* pause */
gst_element_set_state (pipeline, GST_STATE_PAUSED); /* unlink and remove
former alsa sink */
gst_element_unlink(decoder, alsaaudiosink);
gst_bin_remove (GST_BIN (pipeline), alsaaudiosink); /* link to pulse audio
sink */
pulseaudiosink = gst_element_factory_make ("pulsesink",
"pulse_play_audio");
gst_bin_add (GST_BIN (pipeline), pulseaudiosink);
gst_element_link(decoder, pulseaudiosink); /* start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING); ====complete source
code==== /* example-begin
helloworld.c */ #include <gst/gst.h> int main (int argc, char
*argv[]) { GstElement *pipeline,
*filesrc, *decoder, *alsaaudiosink = NULL, *pulseaudiosink = NULL; gst_init(&argc,
&argv); if (argc != 2) { g_print
("usage: %s <mp3 filename>\n", argv[0]); exit
(-1); } /* create a new
pipeline to hold the elements */ pipeline =
gst_pipeline_new ("pipeline"); /* create a disk
reader */ filesrc =
gst_element_factory_make ("filesrc", "disk_source"); g_object_set
(G_OBJECT (filesrc), "location", argv[1], NULL); /* now it's time to
get the decoder */ decoder =
gst_element_factory_make ("mad", "decoder"); /* and an audio
sink */ alsaaudiosink =
gst_element_factory_make ("alsasink", "alsa_play_audio"); /* add objects to
the main pipeline */ gst_bin_add_many
(GST_BIN (pipeline), filesrc, decoder, alsaaudiosink, NULL); /* link src to sink
*/
gst_element_link(filesrc, decoder);
gst_element_link(decoder,alsaaudiosink); /* start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING); static int
is_playing = 1; static int
is_quiting = 0; static int
is_alsasink = 1; while
(1) {
if(!(gst_bin_iterate_elements (GST_BIN (pipeline)))) break;
printf(" q:Quit, p:Pause/Play, t:Test: "); char ch
=0 ;
ch=getchar(); switch
(ch) { case
'p':
if(is_playing) {
/* pause */
gst_element_set_state (pipeline, GST_STATE_PAUSED);
}
else {
/* start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
}
is_playing = !is_playing; break; case
't':
printf("================================================================\n");
if(is_alsasink) {
/* pause */
gst_element_set_state (pipeline, GST_STATE_PAUSED);
// gst_element_set_state (pipeline, GST_STATE_NULL);
sleep(1);
gst_element_unlink(decoder, alsaaudiosink);
gst_bin_remove (GST_BIN (pipeline), alsaaudiosink);
gst_element_set_state (alsaaudiosink, GST_STATE_NULL);
gst_object_unref (GST_OBJECT
(alsaaudiosink));
pulseaudiosink = gst_element_factory_make ("pulsesink",
"pulse_play_audio");
gst_bin_add (GST_BIN (pipeline), pulseaudiosink);
gst_element_link(decoder, pulseaudiosink);
sleep(1);
/* start playing */
printf("pulse sink prepare to play:\n");
gst_element_set_state (pipeline, GST_STATE_PLAYING);
}
else {
/* pause */
gst_element_set_state (pipeline, GST_STATE_PAUSED);
// gst_element_set_state (pipeline, GST_STATE_NULL);
sleep(1);
gst_element_unlink(decoder, pulseaudiosink);
gst_bin_remove (GST_BIN (pipeline), pulseaudiosink);
gst_element_set_state (pulseaudiosink, GST_STATE_NULL);
gst_object_unref (GST_OBJECT
(pulseaudiosink));
alsaaudiosink = gst_element_factory_make ("alsasink",
"alsa_play_audio");
gst_bin_add (GST_BIN (pipeline), alsaaudiosink);
gst_element_link(decoder, alsaaudiosink);
sleep(1);
/* start playing */
printf("alsa sink prepare to play:\n");
gst_element_set_state (pipeline, GST_STATE_PLAYING);
}
is_alsasink = !is_alsasink; break; case
'q':
is_quiting = 1; break;
default: break; }
if(is_quiting) break;
GstFormat fmt = GST_FORMAT_TIME;
gint64 pos, len;
if (gst_element_query_position (pipeline, &fmt, &pos)
&& gst_element_query_duration (pipeline, &fmt, &len)) {
g_print ("Time: %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT
"\n",
GST_TIME_ARGS (pos), GST_TIME_ARGS (len));
}
sleep(2); } /* stop the
pipeline */
gst_element_set_state (pipeline, GST_STATE_NULL); /* we don't need a
reference to these objects anymore */ gst_object_unref
(GST_OBJECT (pipeline)); /* unreffing the
pipeline unrefs the contained elements as well */ exit (0); } /* example-end helloworld.c
*/ ZHAO,
Halley (Aihua) Email: halley.zhao[hidden email] Tel: +86(21)61166476 iNet: 8821-6476 SSG/OTC/UMD 3W033 ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |