Воспроизведение звука в WebView из JavaScript - PullRequest
2 голосов
/ 06 февраля 2012

Я пытаюсь воспроизвести звук из кода JavaScript, загруженного в WebView из ресурсов:

WebView web_view = (WebView) findViewById(R.id.web_view);
web_view.getSettings().setJavaScriptEnabled(true);
web_view.setWebChromeClient(new WebChromeClient());
web_view.loadUrl("file:///assets/www/index.html");

Я испробовал все комбинации следующих способов воспроизведения звука с файлами OGG, MP3 и WAV, код JavaSrciptнаходится в assets / www / js / play.js:

audio = new Audio("../audio/sound.mp3");
audio.load();
audio.play();

audio = new Audio("./audio/sound.mp3");
audio.load();
audio.play();

audio = new Audio("audio/sound.mp3");
audio.load();
audio.play();

audio = new Audio("file:///android_asset/www/audio/sound.mp3");
audio.load();
audio.play();

audio = new Audio();
audio.src = document.getElementById("audio_tag").src;
audio.load();
audio.play();

Где audio_tag равен <audio id="audio_tag" src="audio/sound.mp3" preload="auto"></audio>, также пробуется со всеми комбинациями путей и форматов.

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

E / MediaPlayer (1530): ошибка (1, -2147483648)

Гадание из этого информационного сообщения,путь к аудиофайлу должен быть правильным для второго и пятого случаев:

I/StagefrightPlayer(33): setDataSource('file:///android_asset/www/audio/sound.mp3');

Хотя этот вопрос можно считать дубликатом Android WebView, воспроизводящего аудио с использованием JavaScript , и ответ не помогаетво всяком случае, так как shouldOverrideUrlLoading никогда не вызывается, я пытаюсь уточнить эту проблему здесь более точно.

Есть ли у вас какие-либо подсказки, что может быть не так или как узнать, что это такое?

Thank you.

Редактировать: Тестирование в Galaxy Gio с Android 2.3 дает мне другой набор ошибок, хотя:

02-06 17: 15: 13.829: V / PlayerDriver (95): AddToScheduler 02-06 17: 15: 13.829: V / PlayerDriver (95): PendForExec 02-06 17: 15: 13.829: V / PlayerDriver (95): OsclActiveScheduler :: Current 02-06 17: 15: 13.829: V /PlayerDriver (95): StartScheduler 02-06 17: 15: 13.829: V / PVPlayer (95): отправить PLAYER_SETUP 02-06 17: 15: 13.829: V / PlayerDriver (95): отправить код игрока: 2 02-06 17:15: 13.829: V / PlayerDriver (95): CommandCompleted 02-06 17: 15: 13.829: V / PlayerDriver (95): Завершенная команда PLAYER_SETUP status = PVMFSuccess 02-06 17: 15: 13.829: V / PVPlayer (95):setDataSource (файл: ///android_asset/www/audio/sound.mp3) 02-06 17: 15: 13.839: V / PVPlayer (95): prepareAsync 02-06 17: 15: 13.839: V / PVPlayer (95):источник данных = файл: ///android_asset/www/audio/sound.mp3 02-06 17: 15: 13.849: V / PlayerDriver (95): отправить код игрока: 3 02-06 17: 15: 13.849: V / PlayerDriver(95): handleSetDataSource 02-06 17: 15: 13.849: V / PlayerДрайвер (95): handleSetDataSource - сканирование на расширение
02-06 17: 15: 13.849: V / PlayerDriver (95): HandleInformationalEvent: PVMFInfoErrorHandlingStart 02-06 17: 15: 13.849: V / PlayerDriver (95): HandleInformationalEvent:type = 26 UNHANDLED 02-06 17: 15: 13.849: W / MediaPlayer (4361): информация / предупреждение (1, 26) 02-06 17: 15: 13.849: V / PlayerDriver (95): CommandCompleted 02-06 17:15: 13.849: V / PlayerDriver (95): завершенная команда PLAYER_SET_DATA_SOURCE status = PVMFErrNotSupported 02-06 17: 15: 13.849: E / PlayerDriver (95): команда PLAYER_SET_DATA_SOURCE завершена с ошибкой или информация
PVMFErN15: 13.849: E / MediaPlayer (4361): ошибка (1, -4) 02-06 17: 15: 13.849: V / PVPlayer (95): run_init s = -2147483648, отменено = 0 02-06 17:15:13.849: V / PlayerDriver (95): HandleInformationalEvent: PVMFInfoErrorHandlingComplete 02-06 17: 15: 13.849: W / PlayerDriver (95): PVMFInfoErrorHandlingComplete
02-06 17: 15: 13.939: I / MediaPlayer (4361)1,26) 02-06 17: 15: 13,939: E / MediaPlayer (4361): ошибка (1, -4)02-06 17: 15: 13.939: V / PVPlayer (95): сброс настроек 02-06 17: 15: 13.939: V / PlayerDriver (95): отправить код игрока: 18 02-06 17: 15: 13.939: V / PlayerDriver(95): handleCancelAllCommands 02-06 17: 15: 13.939: V / PlayerDriver (95): CommandCompleted 02-06 17: 15: 13.939: V / PlayerDriver (95): завершенная команда PLAYER_CANCEL_ALL_COMMANDS status = PVMFSuccess 02-06 17:15: 13.939: V / PlayerDriver (95): отправьте код игрока: 11 02-06 17: 15: 13.939: V / PlayerDriver (95): handleReset 02-06 17: 15: 13.939: V / PlayerDriver (95): CommandCompleted 02-06 17: 15: 13.939: V / PlayerDriver (95): завершенная команда PLAYER_RESET status = PVMFSuccess 02-06 17: 15: 13.939: V / PlayerDriver (95): отправить код игрока: 17 02-06 17: 15: 13.939: V / PlayerDriver (95): handleRemoveDataSource 02-0617: 15: 13.939: V / PlayerDriver (95): команда завершена 02-06 17: 15: 13.939: V / PlayerDriver (95): Завершенная команда Статус PLAYER_REMOVE_DATA_SOURCE = PVMFSuccess 02-06 17: 15: 13.939: V / PlayerDriver (95): удаление источника данных завершено 02-06 17: 15: 13.939: V / PVPlayer (95): файл unmap

Ответы [ 3 ]

7 голосов
/ 06 мая 2012

Re: MediaPlayer (): ошибка (1, -2147483648)

Android MediaPlayer необходимо, чтобы мультимедийные файлы были доступны для чтения всему миру, чтобы они не могли находиться в папке «assets» внутри проекта Eclipse. Вставьте аудио / видео файлы на внешнее хранилище устройства. Для этого с помощью эмулятора используйте перспективу DDMS в Eclipse (во время работы вашего эмулятора перейдите в Window-> Open Prospective-> Other-> DDMS), чтобы создать папку и перенести файлы на образ карты SD или внутренний (не съемный) хранения.

Ссылка на DDMS: http://developer.android.com/guide/developing/debugging/ddms.html

В DDM выберите свой эмулятор на панели «Устройства» слева, а затем перейдите на вкладку «FileExplorer» справа, найдите папку с именем / mnt / sdcard /, которая содержит содержимое SDCard, или, альтернативно, / Android / data / имя_пакета / files / для стандартной области хранения приложения. Итак, в приведенном выше примере, если вы создадите папку myaudio на SD-карте, путь к имени файла будет:

audio = new Audio ("/ mnt / sdcard / myaudio / sound.mp3");

Ссылка: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

И не отказывайтесь от HTML5!

2 голосов
/ 29 июня 2013

У меня была та же проблема, и, наконец, я использую PhoneGap и Cordova, где вы можете легко играть и записывать аудио: http://docs.phonegap.com/en/2.9.0/cordova_media_media.md.html

0 голосов
/ 06 февраля 2012

Это зависит от вашего Android-устройства и доступных кодеков ... Но, вероятно, путь неверный.Вы используете PhoneGap?Ваш код воспроизводится в настольных браузерах?

Я использую похожий код:

var myAudio = document.getElementsByTagName('audio')[0];
myAudio.pause();
myAudio.src = file;
myAudio.play();

И мой HTML-тег аудио выглядит так:

<audio id="audio" src="" type="audio/mpeg" preload="metadata" ontimeupdate="timeUpdate()"
   ondurationchange="durationChange()" onerror="musicError()" onended="musicEnded()">
<embed src="" height=50 width=100></embed>

I 'm использует формат аудио файла mp3, потому что он работает для iOS и некоторых устройств Android.

Также обратите внимание, что элемент Audio tag доступен не во всех версиях Android.Как вы можете видеть здесь , он работает для Android 2.3 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...