Воспроизведение MP3/WAV в Rhomobile 5.4 на Android

У меня есть приложение, которое пытается воспроизвести небольшой звуковой файл, используя следующий код:

Alert.play_file("/public/audio/" + $audio_file + ".mp3", "audio/x-mp3") if Configuration.current.audio_prompt?

Когда я использую этот код, приложение выдает "Ошибка сервера", которая выглядит следующим образом:

Я попытался использовать API проигрывателя мультимедиа вместо API оповещения и получил по существу ту же ошибку.

Это проблема кодека?

Для файлов Wav (да, вместо mp3 в этих строках правильно указан файл wav) ошибка не выдается, но сам звук не воспроизводится.

РЕДАКТИРОВАТЬ

Я наконец смог получить некоторые данные logcat во время этой ошибки и получил это:

09-25 19: 51: 03.122 8891 8948 I APP: I 25.09.2016 19: 51: 03: 122 000022f4 HttpServer| Конец GC. 09-25 19: 51: 03.123 8891 8948 I APP: I 25.09.2016 19:51:03:123 000022f4 HttpServer| URI процесса: '/app/Animation/draw' 09-25 19:51:03.124 8891 8948 I APP: I 25.09.2016 19:51:03:124 000022f4 APP| RHO подача: /app/Animation/draw 09-25 19:51:03.125 8891 8948 I APP: I 25.09.2016 19: 51: 03: 124 000022f4 APP | Параметры: {"char_id"=>"6", "ajax"=>"", "run"=>"1"} 09-25 19:51:03.131 500 500 В AudioFlinger: освобождение 55 из 8891 для -1 09 -25 19: 51: 03.131 500 500 В AudioFlinger: уменьшенный счетчик рефинансирования до 0 09-25 19: 51: 03.131 500 500 В AudioFlinger: удаление устаревших эффектов 09-25 19:51:03.132 8891 8948 E ExtMediaPlayer-JNI: QCMediaPlayer не удалось быть расположенным.... 09-25 19:51:03.132 8891 8948 D MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 09-25 19:51:03.132 8891 8948 E ExtMediaPlayer-JNI: QCMediaPlayer не удалось найти.... 09-25 19:51:03.132 8891 8948 D MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 09-25 19:51:03.132 500 4043 V AudioFlinger: получение 56 из 8891, для -1 09-25 19: 51: 03.132 500 4043 В AudioFlinger: добавлена ​​новая запись для 56 09-25 19:51:03.133 8891 8948 I APP: E 25.09.2016 19:51:03:133 000022f4 RhoFileApi| Не удается открыть дескриптор файла: /public/audio/xing4.mp3: открыть не удалось: ENOENT (нет такого файла или каталога) 09-25 19:51:03.133 8891 8948 I APP: E 25.09.2016 19:51:03: 133 000022f4 Уведомление Синглтон | null 09-25 19:51:03.133 8891 8948 I APP: java.lang.IllegalArgumentException 09-25 19:51:03.133 8891 8948 I APP: at android.media.MediaPlayer._setDataSource(собственный метод) 09-25 19:51: 03.133 8891 8948 I APP: на android.media.MediaPlayer.setDataSource(MediaPlayer.java:1133) 09-25 19:51:03.133 8891 8948 I APP: на android.media.MediaPlayer.setDataSource(MediaPlayer.java:1118) 09-25 19:51:03.133 8891 8948 I APP: на com.rho.notification.NotificationSingleton.playFile(NotificationSingleton.java:168) 09-25 19:51:03.133 8891 8948 I APP: на com.rho.notification.NotificationSingletonBase$playFileTask.run(NotificationSingletonBase.java:106) 09-25 19:51:03.133 8891 8948 I APP: на com.rhomobile.rhodes.api.MethodExecutor.run(MethodExecutor.java:11) 09-25 19:51:03.133 8891 8948 I APP: E 25.09.2016 19:51:03:133 000022f4 MethodResult| Обратный звонок:, данные:; ID вкладки: -1; resultType: typeError; результат: "ноль" 09-25 19:51:03.134 8891 8948 I APP: I 25.09.2016 19:51:03:133 000022f4 APP| Ошибка приложения: 09-25 19: 51: 03.134 8891 8948 I APP: lib / RhoNotificationApi.rb: 53: in playFile' 09-25 19:51:03.134 8891 8948 I APP : lib/RhoNotificationApi.rb:53:inplay_file '09-25 19: 51: 03.134 8891 8948 I APP: apps / app / Animation / animation_controller.rb: 273: in draw' 09-25 19:51:03.134 8891 8948 I APP : lib/rho/rhocontroller.rb:101:inслужить ' 09-25 19:51:03.134 8891 8948 I APP: lib/rho/rhoapplication.rb:217: в serve' 09-25 19:51:03.134 8891 8948 I APP : lib/rho/rho.rb:836:inподача ' 09-25 19:51:03.135 8891 8948 I APP: I 25.09.2016 19:51:03:135 000022f4 HttpServer| GC Start. 09-25 19:51:03.153 8891 8891 W cr_BindingManager: Невозможно позвонить определено Visibility() - никогда не видел соединение для pid: 8891 09-25 19:51:03.162 8891 8891 I APP: I 25.09.2016 19:51:03:162 000022bb WebViewSingleton| onNavigateComplete <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 09-25 19:51:03.162 721 721 I MSM-irqbalance: решено переместить IRQ115 из CPU0 в CPU3 09-25 19:51:03.244 514 628 E ThermalEngine: ==== Введите sched_bmhb_cs_gov -> vs_temp = 305 === 09-25 19:51:03.250 8891 8948 I APP: I 25.09.2016 19:51:03:250 000022f4 HttpServer| Конец GC.

Наиболее значимым моментом является строка:

RhoFileApi | Не удается открыть дескриптор файла: /public/audio/xing4.mp3: открыть не удалось: ENOENT (нет такого файла или каталога)

Который, кажется, указывает на отсутствующий файл или неправильное местоположение, но это, безусловно, где мой файл находится.

Я нашел некоторые сообщения, которые, кажется, похожи проблемы здесь:

https://developer.zebra.com/thread/4416

https://developer.zebra.com/thread/1787

Но их решения не сработали. Я не пытался создать папку, явно называемую "оповещения", а не "аудио" в общей папке, но я не понимаю, почему это имеет значение.

1 ответ

Решение

Исправлено сейчас. Для тех, кто придет позже, проблема заключалась в том, что на местоположение файла нужно ссылаться из абсолютной позиции, что можно сделать следующим образом:

Rho::Notification.playFile( Rho::Application.appsBundleFolder + "/public/audio/" + $audio_file + ".mp3", "audio/x-mp3")
Другие вопросы по тегам