2014-06-13 25 views
10

Niedawno uaktualniłem nasz projekt iOS z Cordova 3.3 do 3.5.Odtwarzanie plików audio nie działa z Cordova 3.5 na iOS

Pliki mp3 (wcześniej pobrane do foldera ze standardowymi dokumentami iOS) nie będą odtwarzane za pomocą interfejsu API mediów/wtyczki. Ten kod działa niezawodnie na iOS dla wielu wersji, w tym Cordova 3.3 ... Pliki mp3 zostały pobrane do podkatalogu o nazwie "Downloads" w folderze "dokumenty" standardowej aplikacji na iOS.

W konsoli XCode Pojawia się następujący błąd:

Nieznany plik zasobu: //localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/ {App-ID} /Documents/Downloads/testsound.mp3 "

W moim kodzie (po kilku blokach kodu dla interfejsu API wtyczek plików) otrzymuję katalog za pomocą: downloadDirFullPath = window.appRootDir.toURL();

Aby zachować zgodność z nowymi zmianami w pliku API pliku 3.5, ostatnio zmieniłem to z downloadDirFullPath = window.appRootDir.fullPath;

Czy interfejs API wtyczki Media dla Cordova 3.5 został uszkodzony w celu odtwarzania dźwięku z katalogu aplikacji iOS?

Czy jestem po prostu bardzo zmęczony i brakuje mi czegoś oczywistego ... Wszelkie sugestie i informacje bardzo doceniam.

Chris aka weeasle

UPDATE ON 20/Jun/14: FIX Found. Mogę teraz pobrać pobrane pliki .mp3 do gry na iOS Cordova 3.5 ... Najwyraźniej z nowym systemem plików Cordova 3.5 metoda entry.fullPath nie działa i jest zastąpiona przez entry.toURL() jak na https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

To działa grzywna podczas wywoływania obrazów za pomocą Cordova. Jednak od pewnego czasu na urządzeniu iOS występowało dziwne wrażenie: w przypadku odtwarzania dźwięku nie akceptuje adresów URL zaczynających się od pliku: /// wymaga tylko bezwzględnych ścieżek, takich jak/var/mobile/Applications/{GUID}/Documents/

Rozwiązaniem i rozwiązaniem jest użycie nowej metody toInternalURL() wywoływanej w pozycji zwróconej przez fileSystem.root.getDirectory. Dokładne wywołanie, którego używam, to downloadDirFullPath = window.appRootDir.toInternalURL(); (wywołane z wpisu przekazanego przez fileSystem.root.getDirectory).

ta zwraca: cdvfile: // localhost/persistent/Pliki do pobrania /, które po wstępnej zawieszone do .mp3 lub innych plików audio odgrywa powodzeniem w iOS ..

Działa to również do wyświetlania obrazów i mediów jest więc jedno niezawodne rozwiązanie dla systemu Cordova iOS 3.5 i nowszych wersji.

Jest to zdecydowanie preferowane rozwiązanie, ponieważ jest bezpieczniejsze niż używanie względnych ścieżek (tak, jakby w przyszłości Apple dokonał istotnych zmian w strukturze plików za pomocą wersji iOS, dostęp do plików mógłby przerwa) ...

Jeszcze jedna uwaga - oprócz powyższych połączeń/metod, downloadDi rName = window.appRootDir.Nazwa; również ustawia cdvfile: ścieżka // localhost/persistent/baza

Weeasle

+0

Czy próbowałeś jakąś ścieżkę Relativ takiego: Watsche

+0

Dzięki Watsche za natychmiastową odpowiedź. Właśnie edytowałem pytanie i zobaczyłem twój post ... Niestety jestem kompletnym nowicjuszem z ObjC i polegam na API Cordova/Phonegap ... Jak wspomniano w zredagowanej odpowiedzi, spróbowałem adresowania względnego - niektóre starsze wersje Cordova wspominają adresy względne ... Ale bez radości ... – chris

+0

Dzięki. Wiele drobnych rzeczy się zmienia (czasem tylko ze względu na to) i nigdy nie są udokumentowane. To, czego najbardziej nienawidzę w Cordova/Phonegap – Mirko

Odpowiedz

1

nie grałem wokół z mediami na iOS niedawno, ale jeśli spojrzeć na docs stwierdza:

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 

Tak gdybym był tobą chciałbym spróbować względną ścieżkę:

"../Downloads/testsound.mp3" 

które powinny Zmiana

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

się tylko:

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

Dziękuję za odpowiedź Szymon - Bardzo doceniam twoje wskazówki .. Miałem do zabawy względnymi ścieżkami, a potem na szczęście znalazłem poprawkę - Proszę zobaczyć powyższe pytanie, które zaktualizowałem - Wiem, że będziesz chciał przekazać te informacje do Cordova Devs na iOS, ponieważ rozwiązuje on problem z odtwarzaniem dźwięku za pomocą wtyczki Media na iOS z nową wtyczką systemu plików Cordova 3.5 zmienia się .. – chris

+0

każdy pomysł na temat tego http://stackoverflow.com/questions/27455884/file-copyto-not-working-in-cordova – Aravin

0

Przedrostek dokumenty zakończył pracę, aby zabrać mnie do trwałego miejsca przechowywania w aplikacji. W źródłem dla iOS plug-in to wygląda można korzystać z tych przedrostków:

"documents://" 
"http://" 
"https://" 
"cdvfile://" 
Powiązane problemy