我下载时播放音频文件

时间:2013-08-12 13:24:40

标签: ios avaudioplayer avplayer

我正在尝试播放部分下载的文件(我希望音频在有足够的下载数据时启动)。

我尝试了以下内容:

self.mutableData = nil;
self.mutableData = [NSMutableData data];
self.mutableData.length = 0;

GTMHTTPFetcher *fetcher =
[[self driveService].fetcherService fetcherWithURLString:song.filePath];

[fetcher setReceivedDataBlock:^(NSData *dataReceivedSoFar) {
    [self.mutableData appendData:dataReceivedSoFar];

    if (!self.audioPlayer.playing && self.mutableData.length > 1000000)
    {
        self.audioPlayer = nil;
        self.audioPlayer = [[AVAudioPlayer alloc] initWithData:self.mutableData error:nil];
        [self.audioPlayer play];
    }
}];

[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
    if (error == nil) 
    {
        NSLog(@"NSURLResponse: %@", fetcher.response.);
    } 
    else 
    {
        NSLog(@"An error occurred: %@", error);
    }
}];

但是它开始播放前1-3秒,然后应用程序崩溃或者一遍又一遍地播放1-3秒直到下载完成然后播放整首歌曲。

我可以通过AVPlayer以某种方式实现这一目标,还是解决了这个问题?

2 个答案:

答案 0 :(得分:1)

AVAudioPlayer无法播放可供写入/下载的文件,但AVPlayer可以。切换到AVPlayer。

答案 1 :(得分:0)

要播放音频,您应该使用AVPlayerAudio Queue Services

initWithData并非用于此目的。下载整个文件后,您可以使用initWithData