2010-09-01 2 views
22

ich seltsames Verhalten beobachtet, während mit AVAudioPlayer arbeiteWie wird der Fehlercode -43 von NSOSStatusErrorDomain beim Initialisieren des AVAudioPlayer-Objekts behandelt?

Nach dem Code:

AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@",fileName]] error: &error]; 

Dabei heruntergeladen ich die Datei vom Server und in Anwendung der Cache-Verzeichnis gespeichert.

ich folgende Fehler bekommen:

Error in playing = 
Domain = NSOSStatusErrorDomain 
Code = -43 
Description = Error Domain=NSOSStatusErrorDomain Code=-43 "The operation couldn’t be completed. (OSStatus error -43.)" 

Ich überprüfte auch, dass Datei an dieser Stelle vorhanden ist. Jedes Mal, wenn ich meine Anwendung neu starte, wurde der gleiche Fehler beim Song-Play angezeigt. Nach einiger Zeit, als ich versuchte, den gleichen Code auszuführen, funktioniert mein Player einfach ohne Fehler.

Kann mir jemand sagen, wie ich mit diesem Fehler umgehen soll?

Kann mir auch jemand erklären, was das Problem war?

+0

ich etwas bekam * sehr * ähnlich - außer, dass ich konnte eine lokale Audiodatei bekommen zu spielen, aber nicht eine Remote-Datei über eine URL. Haben Sie jemals die Bedeutung und richtige Antwort auf OSStatus -43 herausgefunden? – bradheintz

+0

Die Datei wird nicht im lokalen Pfad des Cache-Verzeichnisses der Anwendung gespeichert. Und ich benutze nur diesen Pfad. kein entfernter Pfad. – Tanu

+0

Ich bekomme keine Informationen über "OSStatus -43". Es besagt nur, dass "der Vorgang nicht abgeschlossen werden konnte". – Tanu

Antwort

23

hatte ich den gleichen Fehler mit diesem Code, obwohl ich, dass die songCacheURL gültig war überprüfen konnte und dass die Datei zur Verfügung:

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:songCacheURL error:&error]; 

Ich konnte das Problem beheben, indem Sie die Datei lädt zuerst in ein NSData Element und dann, dass die AVAudioPlayer stattdessen wie so initialisiert werden:

NSData *songFile = [[NSData alloc] initWithContentsOfURL:songCacheURL options:NSDataReadingMappedIfSafe error:&error1 ]; 
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:songFile error:&error2]; 

hoffe ich, dass jemand anderes hilft.

Robin

+2

Falls jemand dies als eine Lösung zum Laden einer ipod-library: // URL in iOS 5 betrachtet, wird die initWithContentsOfURL-Methode mit dem Fehlercode 256 fehlschlagen. – arlomedia

0

Ich hatte den gleichen Fehler und es schien, dass die URL Null war. Versuchen Sie zu überprüfen, ob Ihr URL-Objekt! = Nil ist. Vielleicht ist dein Weg falsch.

27

AVAudioPlayer unterstützt kein Streaming über HTTP. Verwenden Sie stattdessen den AVPlayer.

+1

Dies ist definitiv die richtige Antwort. Die API für AVPlayer ist etwas anders, aber nur geringfügig, und es wird Audio über HTTP abgespielt. HTTP-URLs machen AVAudioPlayer einen Fehler von -43. –

+0

aber es ist schwierig, Song mit AVPlayer zu pausieren, es wird beim Aufruf von stop gestoppt. Obwohl xcode Zeit braucht, um url in Daten umzuwandeln, ist es besser, AVAudioPlayer für beide pause & stopp Song, So +1 zu @Robin L für die passende Antwort & +1 an Sie für das perfekte Wissen –

+0

In iOS 5 scheint es, dass AVPlayer auch benötigt wird, um eine URL aus der Musikbibliothek zu laden (mit dem Protokoll ipod-library: //). AVAudioPlayer macht das in iOS 6 und 7 gut. – arlomedia

0

Ich hatte ein ähnliches Problem mit AVAudioPlayer während lokale Datei-basierte URL. Wie festgestellt wurde, war das Problem mit einem falschen Dateinamen, ich habe einfach keine führende Whitespace in seinem Namen bemerkt. Überprüfen Sie also zuerst Ihre URLs aufmerksam.

0

Ich hatte ein ähnliches Problem, das Problem war, dass meine MP4-Datei Ziel Mitgliedschaft Kontrollkästchen deaktiviert war, sobald ich es überprüfte, spielte die Datei perfekt.

0

Ich hatte ein gleiches Problem und ich löste es jetzt. Das Problem war im Namen der MP3-Datei. Im Code war der Dateiname "Yes.MP3", aber der Name der Datei ist "Yes.mp3". Wenn ich eine Anwendung im Simulator laufe, ist alles in Ordnung, weil (ich weiß nicht warum) der Simulator nicht zwischen Groß- und Kleinschreibung unterscheidet. Wenn Sie denselben Code auf dem Gerät ausführen, tritt in diesem Fall dieser Fehler auf.

2

Ich hatte ein ähnliches Problem. Wie sich herausstellte, initialisierte ich die URL nur mit dem Dateinamen und unterließ den Pfad der Paket-Ressourcen. Ihre URL init sollte ungefähr so ​​aussehen:

NSURL *url= [NSBundle URLForResource: @"my_sound" withExtension:@"mp3"]; 
Verwandte Themen