在 MPMoviePlayerController 中缓存渐进式下载内容

Posted

技术标签:

【中文标题】在 MPMoviePlayerController 中缓存渐进式下载内容【英文标题】:Cache Progressive downloaded content in MPMoviePlayerController 【发布时间】:2010-07-26 19:25:16 【问题描述】:

我有一个在 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];

下面是播放代码

//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];

【讨论】:

您好,您的解决方案成功了吗?

以上是关于在 MPMoviePlayerController 中缓存渐进式下载内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MPMoviePlayerController 上处理多个 SRT 文件

在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏

在 UITableViewCell 中嵌入 MPMoviePlayerController

MPMoviePlayerController 在影片结尾更改控件样式

后台的 MPMoviePlayerController / AVAudioSession 在来电后不会重新开始播放

MPMoviePlayerController 在启动前显示空白屏幕?