Воспроизведение аудио 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

Ответ 3

Префикс документов закончил работать для меня, чтобы привести меня в постоянное место хранения в приложении. В источнике для iOS-плагина похоже, что вы можете использовать эти префиксы:

"documents://"
"http://"
"https://"
"cdvfile://"