下記の環境、ソースコードでAVAudioPlayerのイニシャライザでエラーが発生します。
よろしくお願いします。

環境

  • Xcode 7.3
  • Swift 2.2
  • iPhone 5(実機)

エラー内容

Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"

ソースコード

class ViewController: UIViewController,NSURLSessionDownloadDelegate,AVAudioPlayerDelegate {
    var audioPlayer:AVAudioPlayer!
    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
            do{
                audioPlayer = try AVAudioPlayer(contentsOfURL: location)
                audioPlayer.delegate = self
                audioPlayer.prepareToPlay()
                audioPlayer.play()
            } catch let error as NSError{
                print(error)
            }
    }
}

追記

状況

  • サーバーから音声ファイルをダウンロードすることには成功している
  • ダウンロードされたものは”hoge.tmp”というように拡張子が”tmp”である
  • ダウンロードするときに指定するURLは”https://server/hoge.3gp”のように拡張子が”3gp”である
  • シミュレータではエラーにならず意図通り動作する(音声が再生される)
    ただし、このソースコードの前画面でaudioPlayer.prepareToPlay()(ここでいうaudioPlayerは前画面のグローバル変数)を実行した場合に限る。(これを実行しないと音声は再生されない

追記その2

シミュレータでの動作の詳細。
シミュレータでもエラーになる場合とならない場合がある

class ViewController: UIViewController ,AVAudioPlayerDelegate{
    var audioPlayer:AVAudioPlayer!
    var audioPlayer2:AVAudioPlayer!
    override func viewDidLoad() {
        let URL_TEST = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("hakucyou", ofType: "mp3")!)
        let URL_TEST2 = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("1458897593 (5)", ofType: "3gp")!)//サーバーからDLした音声ファイル
        do{
            audioPlayer = try AVAudioPlayer(contentsOfURL: URL_TEST, fileTypeHint:"mp3")
            audioPlayer.delegate = self
            //audioPlayer.prepareToPlay()
            audioPlayer2 = try AVAudioPlayer(contentsOfURL: URL_TEST2)
            audioPlayer2.prepareToPlay()
        } catch let error as NSError {
            print(error)
        }
    }
}

このソースコードを実行するとaudioPlayer2 = try AVAudioPlayer(contentsOfURL: URL_TEST2)で同エラーが発生します。
ここで//audioPlayer.prepareToPlay()のコメントを外すとエラーとなりません。