web-dev-qa-db-ja.com

AVAudioPlayerオブジェクトを初期化するときにNSOSStatusErrorDomainからのエラーコード-43を処理する方法は?

AVAudioPlayerでの作業中に奇妙な動作を観察しました

コードは次のとおりです。

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

ここでは、サーバーからファイルをダウンロードして、アプリケーションのキャッシュディレクトリに保存しました。

次のエラーが発生します:

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

また、ファイルがその場所に存在することを確認しました。アプリケーションを再起動するたびに、曲の再生で同じエラーが発生していました。しばらくして、同じコードを実行しようとすると、プレーヤーはエラーなしで正常に動作します。

誰かがこのエラーを処理する方法を教えてもらえますか?

また、何が問題だったのか誰か説明してもらえますか?

22
Tanu

SongCacheURLが有効であり、ファイルが使用可能であることを確認できたにもかかわらず、このコードで同じエラーが発生しました。

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

最初にファイルをNSData要素にロードし、次にそれを使用してAVAudioPlayerを初期化することで、次のように問題を修正できました。

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

それが他の誰かの助けになることを願っています。

ロビン

23
Robin L.

AVAudioPlayerはHTTP経由のストリーミングをサポートしていません。代わりにAVPlayerを使用してみてください。

27
neoneye

同様の問題がありました。結局のところ、ファイル名だけでURLを初期化し、バンドルリソースパスを省略していました。 URLの初期化は次のようになります。

NSURL *url= [NSBundle URLForResource: @"my_sound" withExtension:@"mp3"];
2
frodo2975

ローカルファイルベースのURLを使用しているときに、AVAudioPlayerで同様の問題が発生しました。確立されているように、問題はファイル名が間違っていることでした。名前の先頭に空白があることに気づきませんでした。したがって、まず最初にURLを注意深くチェックしてください。

0
Igor Vasilev

同じエラーが発生し、URLがゼロであるように見えました。 URLオブジェクトが!= nilであるかどうかを確認してください。たぶんあなたの道は間違っています。

0
shannoga

同様の問題が発生しました。問題は、mp4ファイルのターゲットメンバーシップチェックボックスがオフになっていることでした。チェックすると、ファイルは完全に再生されました。

0
Beleg

私も同じ問題を抱えていて、今それを解決しました。問題はmp3ファイルの名前にありました。コードではファイル名は「Yes.MP3」でしたが、ファイル名は「Yes.mp3」です。シミュレーターでアプリケーションを実行すると、(理由はわかりませんが)シミュレーターでは大文字と小文字が区別されないため、すべて問題ありません。デバイスで同じコードを実行している場合、この場合、このエラーが発生します。

0
Jan Vlcek