我正在尝试播放soundcloud中的歌曲,这对于一个例外工作正常:当调用响应处理程序时,文件的下载已经完成。我想在下载开始后直接开始播放文件,但我不知道在调用响应处理程序之前如何访问数据。访问进度处理程序中的数据会很好,但我需要提示如何执行此操作。
答案 0 :(得分:0)
如果您使用NSURLConnection编写自己的下载代码
initWithRequest:delegate:startImmediately:
,委托方法(例如
当数据可用时,将调用connection:didReceiveData:
)。
如果您尝试在下载声音时播放声音,则可能会耗尽数据。您可能应该实施一个缓冲系统,在开始播放之前,您可以下载足够的额外数据以进行几秒钟的播放。通过这种方式,你可以平滑短暂的口吃"在下载中。
答案 1 :(得分:0)
我建议您至少有两个选项来执行您想要的任务:
1. AVPlayer支持从http播放文件。如果你下载一个静态文件 - 你可以要求玩家通过http流式传输。
2.您可以下载一小块文件(例如,一次5 MB)并将它们附加到结果文件或直接写入内存缓冲区。您可以通过添加Content-Range
标头以及您需要的偏移量来下载指定大小的文件块。 (有关更具体的信息,请参阅RFC, 14.16 Content-Range)。这种方法要求服务器支持部分下载,但是现在很难找到不支持此服务器的服务器=)Alamofire很容易让你这样做。