Воспроизведение аудио mp3 без работы с Cordova 3.5 на iOS
Недавно я обновил проект iOS от Cordova 3.3 до 3.5.
mp3 файлы (ранее загруженные в папку стандартных документов iOS) не будут воспроизводиться с использованием медиа-API/плагина. Этот код надежно работает на iOS для многих версий, включая Cordova 3.3... mp3 файлы были загружены в подкаталог под названием "Загрузки" в стандартной папке документов "Приложения для iOS".
В консоли XCode появляется следующая ошибка:
Файл неизвестного ресурса://localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/{App-ID}/Documents/Downloads/testsound.mp3 '
В моем коде (после нескольких блоков кода для API плагинов файлов) я получаю каталог, используя: downloadDirFullPath = window.appRootDir.toURL();
Чтобы соответствовать новым изменениям в API файлов 3.5, я недавно изменил это из
downloadDirFullPath = window.appRootDir.fullPath;
Является ли API Media Plugin для Cordova 3.5 сломанным для воспроизведения звука из каталога документов приложений iOS???
Или я просто очень устал и упускаю что-то очевидное... Любые предложения или информация очень ценятся.
Chris
aka weeasle
UPDATE ON 20/Jun/14: Исправлено. Теперь я могу загрузить загруженный .mp3 для воспроизведения на iOS Cordova 3.5... По-видимому, с новой файловой системой Cordova 3.5 метод entry.fullPath больше не работает и заменяется entry.toURL() в соответствии с https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
Это хорошо работает при обращении к изображениям с помощью Кордовы. Однако в течение некоторого времени была увлечена мультимедийным плагином на iOS: для воспроизведения звука он не принимает URL-адреса, начинающиеся с файла:///он принимает только абсолютные пути например /var/mobile/Applications/ {GUID}/Documents/
Ответ и исправление заключается в использовании нового метода toInternalURL(), вызванного внутри записи, возвращаемой из файла fileSystem.root.getDirectory. Точный вызов, который я использую, - downloadDirFullPath = window.appRootDir.toInternalURL(); (вызывается из записи, переданной файловым файлом fileSystem.root.getDirectory).
Это возвращает: cdvfile://localhost/persistent/Downloads/, который при предварительном нажатии на .mp3 или другие аудиофайлы успешно воспроизводится в iOS..
Это также работает для отображения изображений и носителей, поэтому это единственное надежное решение для Cordova iOS 3.5 и выше.
Это, безусловно, предпочтительное решение, поскольку оно безопаснее, чем использование относительных путей (как будто в будущем Apple внесет существенные изменения в структуру файла с выпуском iOS, доступ к файлу может сломаться)...
Еще одно примечание - помимо вызовов/методов выше, downloadDirName = window.appRootDir.name; также устанавливает cdvfile://localhost/persistent/base path
Weeasle
Ответы
Ответ 1
Я недавно не играл со средой в iOS, но если я посмотрю на документы, он заявляет:
var myMedia = new Media("audio/beer.mp3")
myMedia.play()
// first looks for file in www/audio/beer.mp3 then in
<application>/documents/tmp/audio/beer.mp3
Итак, если бы я был вами, я бы попробовал относительный путь:
"../Downloads/testsound.mp3"
который должен измениться:
<application>/documents/tmp/../Downloads/testsound.mp3
просто:
<application>/documents/Downloads/testsound.mp3
Ответ 2
Единственное, что сработало для меня с последней версией версии cordova 3.5:
http://www.raymondcamden.com/2014/06/23/Cordova-Media-API-Example
Обязательно установите этот плагин:
плагин cordova добавить https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
Ответ 3
Префикс документов закончил работать для меня, чтобы привести меня в постоянное место хранения в приложении. В источнике для iOS-плагина похоже, что вы можете использовать эти префиксы:
"documents://"
"http://"
"https://"
"cdvfile://"