2013-05-13 45 views
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。你對我的問題有任何提示嗎?

感謝, 拉杜

回答

0

的問題是由於仿真器。在設備上一切都很好。不要使用模擬器嘗試直接在設備上進行調試!