0
我正在基於gstreamer教程的播放器上工作。爲此,我創建了使用管道:Gstreamer Android更改管道狀態問題
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);
我poblem是這樣的:我有同樣的代碼的Linux和Android系統。在Linux中,緩衝區每次進入回調函數need_data_cb時都會播放良好。在Android中,它只是在第一次進入need_data_cb時播放緩衝區,然後沒有聲音。爲什麼在兩個版本中都有相同的代碼時會發生這種情況。如果我添加need_data_cb Android版本來改變管道狀態以在將緩衝區添加到appsrc之前暫停和播放,它每次都會播放緩衝區,但每次調用之間會有一些中斷。
問題是爲什麼在Linux上工作正常,沒有這些行,在Android上不行? 在Linux上,我安裝了gstreamer 0.10版本,而在Android上,我使用了gstreamer sdk教程中的libs。你對我的問題有任何提示嗎?
感謝, 拉杜