如何从互联网下载音频/视频文件并存储在iPhone应用程序中?

时间:2012-04-20 11:28:50

标签: iphone ios download audio-streaming audio-player

我正在为音乐开发iPhone应用程序。我想为用户提供一些选项,以便他们可以通过流式传输收听歌曲/音乐,或者他们可以在应用中下载音乐。我知道如何以编程方式在应用程序中流式传输音频文件。但是,我不知道如何下载应用程序中的音频文件并在下载后播放音频。并且用户可以在下载时暂停下载。有可能吗?任何人都可以指导我,请为我分享任何示例代码或教程?我还有一个疑问:你可以帮我在应用程序内创建一个文件夹吗?请帮我。提前谢谢。

2 个答案:

答案 0 :(得分:52)

创建文件夹

对于每个应用,您都有Documents Folder。您在应用中使用的所有文件都存储在此处。如果你想在这里创建更多目录,那么你可以这样做:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"MyNewFolder"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder if it doesn't already exist

<强>下载

如果您想从互联网上下载音频文件,那么您需要查看执行此操作的异步方法。这意味着应用程序可以在后台进行下载时继续执行操作。

为此,我建议您使用ASIHTTPREQUEST。它非常适合执行任何下载请求,为您提供许多选项,例如暂停下载(根据您的要求)。

该网站提供了大量有关下载和存储文件的文档。请查看this页面上的下载文件部分。

您只需执行以下操作:

NSURL *url = [NSURL URLWithString:@"http://www.fileurl.com/example.mp3"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:[NSString stringWithFormat:@"%@",dataPath]]; //use the path from earlier
[request setDelegate:self];
[request startAsynchronous];

然后通过ASIHTTPRequest提供的委托方法处理进度和完成。

<强>播放

播放文件非常简单。一旦它出现在设备上并且您知道它在哪里,只需将其加载到音频播放器中即可。

这里有一个关于使用AVAudioPlayer播放声音的精彩教程。在您的案例中使用它的一个非常简单的例子是:

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3",dataPath];

NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

if (audioPlayer == nil)
    NSLog([error description]);
else
    [audioPlayer play];

答案 1 :(得分:0)

是的,您可以通过AVAudioPlayer下载音频文件并播放下载的文件。下载时我不知道如何暂停,但我已下载音频并播放。您可以从ASIHTTP请求或其他方式下载。

您可以关注这些链接。

  1. http://allseeing-i.com/ASIHTTPRequest/How-to-use#tracking_progress
  2. About download file using ASIHttpRequest