2013-05-13 3 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은 이것이다 : 나는 리눅스에서와 동일한 코드를 기계적 인조 인간. 리눅스 버퍼는 콜백 함수 need_data_cb에 들어갈 때마다 잘 재생됩니다. Android에서는 need_data_cb에 처음 들어가면 버퍼가 재생되고 소리가 들리지 않습니다. 두 버전에서 모두 동일한 코드를 사용하면 왜 이렇게됩니까? appsrc에 버퍼를 추가하기 전에 일시 중지 및 재생할 파이프 라인 상태를 변경하기 위해 need_data_cb Android 버전을 추가하면 버퍼가 재생 될 때마다 버퍼가 재생되지만 각 호출 간에는 약간의 중단이 발생합니다.

//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에서 gstreamer 0.10 버전을 설치했고 Android에 gstreamer SDK 튜토리얼에서 libs를 사용했습니다. 내 문제에 대한 어떤 힌트가 있니?

덕분에, 라두

답변

0

이 문제는 에뮬레이터 때문. 기기에서 모든 것이 괜찮 았어. 에뮬레이터를 사용하지 마십시오. 장치에서 직접 디버깅하십시오!

관련 문제