来自服务器的 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 播放的主要内容,如果未能解决你的问题,请参考以下文章

如果 mp3 文件来自端口 8443,则音频标签在 Cordova Web 应用程序中不起作用

我可以使用 ID3 获取 mp3 文件链接的详细信息吗

无法使用 AVAudioPlayer 播放存储在文档目录中的本地 mp3 文件

使用 ExtAudioFileWrite ios 将流式 mp3 数据包的缓冲区写入 wav 文件

如何在Blackberry中缓冲音频?

Xamarin IOS:无法从互联网播放 mp3