Zrobiłem aplikację, która odtwarza muzykę za pomocą AVAudioPlayer. Pobiera lub pobiera utwory, zapisuje je w danych podstawowych, a następnie odtwarza je, gdy są wybrane. Wszystkie z piętnastu piosenek, które testowałem, działają normalnie przy użyciu zarówno iPhone Music Client, jak i mojego komputera.AudioPlayer iOS i m4a
Jednak trzy z nich nie są odtwarzane w aplikacji. W szczególności mogę przesłać te piętnaście utworów w dowolnej kolejności, wyczyścić mój Model.sqlite, pobrać je ponownie do aplikacji i stwierdzić, że trzy z nich po prostu nie grają. Mają jednak odpowiedni tytuł i artystę.
Patrząc na to zauważyłem, że różnica polega na tym, że niepracujące pliki to .m4a. Jak odtwarzać pliki tego formatu za pomocą AVAudioPlayer?
EDIT („Co«przypominając», co URL pan zainicjować AVAudioPlayer z?”):
Jest to serwer z utworami, które użytkownik może uzyskać dostęp za pośrednictwem aplikacji. Po wybraniu podzbioru S do pobrania aplikacja pobiera S i zapisuje je do CoreModela za pomocą NSManagedObjectContext. Każda piosenka jest przechowywana jako osobna jednostka z unikalnym identyfikatorem i relacją do jednostki podzbioru (w tym przypadku S).
Kiedy "przywołuję" używając AppDelegate, aby uzyskać odpowiednią piosenkę za pomocą kontekstu, dane są również zwracane. I następnie zainicjować AVAudioPlayer tak:
[[AVAudioPlayer alloc] initWithData:(NSData *)[currentSong valueForKey:@"data"] error:nil];
... Więc napisałem, że i wtedy uświadomiłem sobie, że nie zostały faktycznie sprawdził się, co jest błąd (głupi mnie). Zauważyłem, że jest to OSStatus error 1954115647
, który zwraca jako nieobsługiwany typ pliku. Patrząc na to nieco więcej, znalazłem to iPhone: AVAudioPlayer unsupported file type. Rozwiązanie jest tam przedstawiane jako usuwanie złych danych na początku lub inicjowanie z treści adresu URL. Czy możliwe jest znalezienie, gdzie dane są zapisywane w modelu podstawowym, aby podać go jako adres URL?
EDIT: (. Porównaj Pliki są one różne?)
Tak, są. Pobieram przykładowy plik .m4a z mojego serwera, który został przesłany przez aplikację i porównuje go z tym, który jest w iTunes. Odkryłem, że plik jest odcinany przed przesunięciem 229404 (z 2906191 bajtów), który rozpoczyna się 20680001 A0000E21
. W wersji iTunes 0028D83B 6D646174
znajduje się przed tymi bajtami. Przed tym jest duży blok zer poprzedzony dużym blokiem danych poprzedzonym informacjami o kodowaniu iTunes. Na samym szczycie znajduje się więcej informacji kodujących, zawierających plik M4A.
Tak, .m4a jest obsługiwane w iOS i wszystkie pliki nie mają problemu z odtwarzaniem na iPhonie w zwykły sposób. – user592419