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를 사용했습니다. 내 문제에 대한 어떤 힌트가 있니?
덕분에, 라두