gstreamer-java + gstreamer_ndk_bundle + JNA на устройстве Android не может воспроизвести звуковой файл?
Я построил gstreamer_ndk_bundle для платформ 8, 10 и 13 без каких-либо ошибок и проблем. Теперь я пытаюсь заставить gstreamer-java работать на Android, и я думаю, я сделал это работает. JNA работает отлично (проверил на моей lib), я добавил все недостающие Structure.setFieldOrder()
вызывает код gstreamer-java, удаляет все классы и пакеты, которых нет в Android, и он компилируется и запускается на эмуляторе. Кроме того, я использовал библиотеки gstreamer, скомпилированные для конкретной платформы на этом эмуляторе платформы.
Я использую этот код для воспроизведения файла Mp3:
File file = new File(getExternalFilesDir(null),"demo_tunes.mp3" );
try
{
InputStream is = getResources().openRawResource(R.raw.test);
OutputStream os = new FileOutputStream(file);
byte[] data = new byte[is.available()];
is.read(data);
os.write(data);
is.close();
os.close();
}
catch (IOException e)
{
Log.w("ExternalStorage", "Error writing " + file, e);
}
Gst.init("AudioPlayer", new String[]{"--gst-plugin-path=/data/data/org.gstreamer.marko/lib"});
Pipeline pipe = new Pipeline("PipeLine");
Element src = ElementFactory.make("filesrc","Input File");
src.set("location", file.getAbsolutePath());
Element decode = ElementFactory.make("decodebin2", "Decode");
Element sink = ElementFactory.make("audioflingersink", "Sink");
pipe.addMany(src, decode, sink);
Element.linkMany(src, decode, sink);
pipe.play();
Все необходимые библиотеки и их зависимости загружаются так:
static
{
System.loadLibrary("glib-2.0");
System.loadLibrary("gmodule-2.0");
System.loadLibrary("gthread-2.0");
System.loadLibrary("gobject-2.0");
System.loadLibrary("gstreamer-0.10");
//Libraries for base plugins
System.loadLibrary("gstbase-0.10");
System.loadLibrary("gstpbutils-0.10");
System.loadLibrary("gstinterfaces-0.10");
System.loadLibrary("gstvideo-0.10");
System.loadLibrary("gstplaybin");
//Base plugins
System.loadLibrary("gstcoreelements");
System.loadLibrary("gstautodetect");
System.loadLibrary("gsttag-0.10");
System.loadLibrary("gstaudio-0.10");
System.loadLibrary("gstriff-0.10");
System.loadLibrary("ogg");
System.loadLibrary("gstogg");
System.loadLibrary("gstaudioflinger");
System.loadLibrary("mad");
System.loadLibrary("gstmad");
System.loadLibrary("gstdecodebin2");
System.loadLibrary("gstautodetect");
}
Приложение работает, но я не слышу ни звука! Также я попытался максимально увеличить громкость устройства для всех потоков, как это, но также и без звука:
AudioManager audman = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audman.setStreamVolume(AudioManager.STREAM_MUSIC, audman.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
audman.setStreamVolume(AudioManager.STREAM_SYSTEM, audman.getStreamMaxVolume(AudioManager.STREAM_SYSTEM), 0);
audman.setStreamVolume(AudioManager.STREAM_DTMF, audman.getStreamMaxVolume(AudioManager.STREAM_DTMF), 0);
В выводе Log cat я вижу, что приемник аудиофлинга создан, но звука нет:
06-29 20:07:09.407: GstAudioFlingerSink(462): gst_audioflinger_sink_getcaps,0x0
06-29 20:07:09.434: GstAudioFlingerSink(462): creating ringbuffer
06-29 20:07:09.434: GstAudioFlingerSink(462): created ringbuffer @0x1fc810
06-29 20:07:09.447: GstAudioFlingerSink(462): >gst_android_audioringbuffer_open_device
06-29 20:07:09.447: GstAudioFlingerSink(462): gst_audioflinger_sink_open
06-29 20:07:09.447: audioflinger_wrapper(462): Create AudioTrack successfully 0x1f6e70
06-29 20:07:09.447: GstAudioFlingerSink(462): create a new flinger, 0x1f6e70
Что мне не хватает? Также я попробовал это с PlayBin
, PlayBinMediaPlayer
и попробовал с файлом OGG, тоже работает, но без звука...