缓存在MPMoviePlayerController中逐行下载的内容

ryd*_*aze 11 iphone caching mpmovieplayercontroller progressive-download

我有一个在iphone(sdk 4)中实现的音乐播放器,它可以与Mp3(即时转码)或原始渐进式下载一起使用.

反正有没有让渐进式下载的内容(我不直接控制)被缓存,所以它不会重新下载整个内容?

或者是否需要控制全局缓存设置?(另一方面,我使用ASIHTTP API联系我的HTTP服务器并访问允许缓存的数据).

提前致谢.

小智 1

您可以使用 NSURLConnection 保存文件并播放。

例子:

-(void)downloadFileAtPath:(NSString *)path
{
     NSURL *url                  = [NSURL URLWithString:path];     
     NSMutableURLRequest *req    = [NSMutableURLRequest requestWithURL:url];
      NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
    [connection start];
}

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
    //NSLog(@"%s", __PRETTY_FUNCTION__);
    [[NSFileManager defaultManager] createFileAtPath:pathForCurrentFile contents:nil attributes:nil];
     currentFile = [NSFileHandle fileHandleForUpdatingAtPath:pathForCurrentFile];
     if (currentFile)
    {
        [currentFile seekToEndOfFile];
    }
}

-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
    //NSLog(@"%s", __PRETTY_FUNCTION__);
     if( currentFile != nil){
         if (currentFile)  {
            [currentFile seekToEndOfFile];
        }
        [currentFile writeData:data];
    }
}

-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
    NSLog(@"%s, %@", __PRETTY_FUNCTION__, error);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [currentFile closeFile];
}
Run Code Online (Sandbox Code Playgroud)

下面是播放代码

//Playback
 NSString *loopFilePath = [[self applicationDocumentsDirectory].path stringByAppendingPathComponent:vidFileName];

NSURL *vidURL = [NSURL fileURLWithPath:vidFilePath];

self.vidController = [[MPMoviePlayerController alloc] initWithContentURL:vidURL];
self.vidController.view.frame = CGRectMake(0, 0, 640, 480);
self.vidController.controlStyle = MPMovieControlStyleDefault;
[self.view addSubview:self.vidController.view];
[self.vidController prepareToPlay];
[self.vidController play];
Run Code Online (Sandbox Code Playgroud)