Cache Progressive загружаемый контент в MPMoviePlayerController - PullRequest
11 голосов
/ 26 июля 2010

У меня есть музыкальный проигрыватель, реализованный в iphone (SDK 4), и он работает как с потоковой передачей Mp3 (транскодированная на лету), так и с сырой прогрессивной загрузкой.

Есть ли способ сделать так, чтобы прогрессивно загруженный контент (который я не контролирую напрямую) кэшировал, чтобы он не перезагружал весь контент?

Или есть глобальная настройка кэша для управления? (Кстати, я использовал API-интерфейсы ASIHTTP для связи с моим HTTP-сервером и доступа к данным, которые разрешают кэширование).

Заранее спасибо.

1 Ответ

1 голос
/ 18 января 2014

Вы можете использовать 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];
...