Gstreamer Android改变管道状态问题

时间:2013-05-13 15:31:52

标签: android state gstreamer pipeline

我正在基于gstreamer教程的玩家工作。为此,我使用:

创建了一个管道
pipeline    = gst_pipeline_new("audio-player");

//adding also 3 gstreamer elements
appsrc      = gst_element_factory_make("appsrc", "source");
decoder     = gst_element_factory_make("faad", "aac-decoder");
sink        = gst_element_factory_make("autoaudiosink", "audio-output");

//adding and linking the elements to the pipeline
gst_bin_add_many (GST_BIN (pipeline), appsrc, decoder, sink, NULL);
gst_element_link_many(appsrc, decoder,sink, NULL);

//for appsrc was added a callback function need_data_cb
g_signal_connect(appsrc, "need-data", (GCallback)need_data_cb, data);

//state of pipeline is set to playing
gst_element_set_state(pipeline, GST_STATE_PLAYING);

在need_data_cb函数中,我有一个我想要播放的缓冲区:

g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);

我的问题是:我在Linux和Android中使用相同的代码。在Linux中,每次进入回调函数need_data_cb时,缓冲区都会很好地运行。在Android中,它在第一次输入need_data_cb时播放缓冲区,之后没有声音。当我在两个版本中都有相同的代码时,为什么会这样。如果我添加need_data_cb Android版本以在将缓冲区添加到appsrc之前更改管道状态以暂停和播放,则它会播放每次缓冲区但每次调用之间会有一些中断。

//the first 2 lines added in Android version to play each time buffer
gst_element_set_state(pipeline, GST_STATE_PAUSED);
gst_element_set_state(pipeline, GST_STATE_PLAYING);
g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);

问题是为什么在没有这些线路的Linux上工作正常并且在Android上没有? 在Linux上我安装了gstreamer 0.10版本,在Android上我使用了gstreamer sdk教程中的libs。你对我的问题有什么暗示吗?

谢谢, 拉杜

1 个答案:

答案 0 :(得分:0)

问题是由于模拟器造成的。在设备上一切都很好。不要使用模拟器尝试直接在设备上调试!!!