2014-06-13 12 views
10

Recentemente ho aggiornato il nostro progetto iOS da Cordova 3.3 a 3.5.riproduzione audio mp3 non funzionante con Cordova 3.5 su iOS

I file mp3 (precedentemente scaricati nella cartella documenti standard iOS) non vengono riprodotti utilizzando l'API/plug-in multimediale. Questo codice ha funzionato in modo affidabile su iOS per molte versioni e incluso Cordova 3.3 ... I file mp3 sono stati scaricati in una sottodirectory chiamata "Download" nella cartella "documenti" dell'applicazione iOS standard.

Nella console XCode Viene visualizzato il seguente errore:

Risorsa sconosciuta 'file: //localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/ {App-ID} /Documents/Downloads/testsound.mp3 '

Nel mio codice (dopo alcuni blocchi di codice per l'API del plugin di file) ottengo la directory utilizzando: downloadDirFullPath = window.appRootDir.toURL();

Per conformarsi alle nuove modifiche nell'API file 3.5, l'ho modificato di recente da downloadDirFullPath = window.appRootDir.fullPath;

L'API Media Plugin per Cordova 3.5 è interrotta per la riproduzione audio dalla directory Documenti app iOS ???

O sono semplicemente stanco e mi manca qualcosa di ovvio ... Qualsiasi suggerimento o informazione è molto apprezzato.

Chris alias weeasle

AGGIORNAMENTO IL 20/Giu/14: Fix Trovato. Ora posso scaricare le mie mp3 .mp3 per giocare su iOS Cordova 3.5 ... Apparentemente con il nuovo filesystem Cordova 3.5 il metodo entry.fullPath non funziona più e viene sostituito da entry.toURL() come da https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

Questo funziona bene quando si chiamano le immagini con Cordova, Tuttavia c'è stata una stranezza con il Media Plugin su iOS per un po 'di tempo: per la riproduzione del suono, non accetta URL che iniziano con file: /// prende solo percorsi assoluti come/var/mobile/Applicazioni/{GUID}/Documenti/

La risposta e la correzione consiste nell'utilizzare il nuovo metodo toInternalURL() chiamato all'interno della voce restituita da fileSystem.root.getDirectory. La chiamata esatta che uso è downloadDirFullPath = window.appRootDir.toInternalURL(); (chiamato dalla voce passata da fileSystem.root.getDirectory).

Ciò restituisce: cdvfile: // localhost/persistent/Download/che quando pre-pended a .mp3 o altri file audio viene riprodotto con successo in iOS ..

Questo funziona anche per la visualizzazione delle immagini e dei media per cui è un'unica soluzione affidabile per Cordova iOS 3.5 e successive ..

Questa è di gran lunga la soluzione preferita poiché è più sicura dell'utilizzo di percorsi relativi (come se in futuro Apple apportasse modifiche significative alla struttura del file con una versione iOS, l'accesso ai file potrebbe pausa) ...

Un'altra nota: oltre alle chiamate/metodi sopra, downloadDi rName = window.appRootDir.nome; imposta anche cdvfile: percorso // localhost/persistent/base

Weeasle

+0

Forse si è tentato qualche percorso relativ come: Watsche

+0

Grazie Watsche per la tua risposta immediata. Stavo solo modificando la domanda e ho visto il tuo post ... Sfortunatamente sono un debuttante completo con ObjC e uso l'API Cordova/Phonegap ... Come menzionato nella risposta modificata, ho provato l'indirizzamento relativo - alcune versioni precedenti di Cordova menzionano indirizzi relativi ... Ma nessuna gioia ... – chris

+0

Grazie. Molte piccole cose cambiano (a volte solo per il gusto di farlo) e non sono mai documentate. Questa è la cosa che odio di più di Cordova/PhoneGap – Mirko

risposta

1

non ho giocato un po 'con i media su iOS di recente, ma se guardo la documentazione si afferma:

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 

Così , se fossi in te mi piacerebbe provare un percorso relativo di:

"../Downloads/testsound.mp3" 

che dovrebbe cambiare:

<application>/documents/tmp/../Downloads/testsound.mp3 

in proprio:

<application>/documents/Downloads/testsound.mp3 
+0

Grazie per la tua risposta Simon - Molto apprezzo la tua guida .. Avevo circa per giocare con i relativi percorsi di più e poi per fortuna ho trovato la correzione - Si prega di vedere la domanda di cui sopra ho aggiornato - so che vorrai passare queste informazioni insieme a Cordova Devs su iOS in quanto risolve come riprodurre audio con plug-in multimediale su iOS con il nuovo plugin per il filesystem Cordova 3.5 cambia .. – chris

+0

qualsiasi idea su questo http://stackoverflow.com/questions/27455884/file-copyto-not-working-in-cordova – Aravin

0

Il prefisso documenti ha terminato di funzionare per portarmi in una posizione di archiviazione permanente all'interno dell'app. Nella sorgente per il plug-in iOS sembra che è possibile utilizzare questi prefissi:

"documents://" 
"http://" 
"https://" 
"cdvfile://" 
Problemi correlati