来自服务器的 MP3 文件在 iOS7 中无法使用 AVAudioPlayer 播放

Posted

技术标签:

【中文标题】来自服务器的 MP3 文件在 iOS7 中无法使用 AVAudioPlayer 播放【英文标题】:MP3 file from server is not playing with AVAudioPlayer in iOS7 【发布时间】:2015-03-31 11:41:24 【问题描述】:

这是我的代码,首先我调用 mp3 url 来下载音频数据。然后我将该数据保存在本地目录中,之后我正在从本地文件路径播放音频,但它不起作用AVAudioPlayer 抛出错误。我也尝试了其他一些方法,但没有人适合我。 在模拟器上相同的代码工作正常。 并且音频网址在浏览器中播放起来就像一个魅力。

 NSURL *urlll=[NSURL URLWithString:@"www.xyz.audio.mp3"];

[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:urlll] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *responce,NSData* data,NSError * error) 
        if (error == nil)
        
            indicator.hidden=YES;
            [indicator stopAnimating];

            if (data)
            
               NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
                NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , @"Audio"];
                [data writeToFile:filePath atomically:YES];

              NSURL *fileURL = [NSURL fileURLWithPath:filePath];
                AudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];

                AudioPlayer.delegate=self;
                [AudioPlayer prepareToPlay];
                if (AudioPlayer == nil) 
                    NSLog(@"AudioPlayer did not load properly: %@", [error description]);
                 else 
                    [AudioPlayer play];

                
           
      
];

但我遇到了这些错误:Error Domain=NSOSStatusErrorDomain Code=1685348671 "The operation couldn't be completed. (OSStatus error 1685348671.)

请帮帮我:(。

【问题讨论】:

这个代码在你的 viewDidLoad 中吗? ***.com/questions/1490989/… 否,此代码是从 tableview 调用并选择。 【参考方案1】:

在您的代码中,您将音频保存到NSString *filePath,但您使用fileURL 启动。难道你真的想这样做:

AudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filePath] error:&error];

如果不是,那么您应该知道错误正在向您报告kAudioFileInvalidFileError。这意味着文件格式错误。您可以尝试其他格式,例如 .caf 或 .aifcaiff

--编辑--

确保 AVAudioPlayer 是 .m 或 .h 文件中的属性,以便离开方法后内存分配持续:

@property (nonatomic,strong) AVAudioPlayer *AudioPlayer;

(附注:属性应以小写 -> audioPlayer

【讨论】:

我已经尝试了所有格式和getiing,无法完成操作。 (OSStatus 错误 1954115647。) 此问题仅适用于更新设备上的 ios7 一切正常。 您的 AudioPlayer 属性是如何声明的? 在 .h 中像这样 AVAudioPlayer *AudioPlayer; 我试过这个@property (nonatomic,strong) AVAudioPlayer *AudioPlayer;

以上是关于来自服务器的 MP3 文件在 iOS7 中无法使用 AVAudioPlayer 播放的主要内容,如果未能解决你的问题,请参考以下文章