11

J'ai un lecteur de musique implémenté dans l'iphone (sdk 4) et il fonctionne à la fois avec le streaming de Mp3 (Transcodé à la volée) ou le téléchargement progressif brut.Cache Contenu téléchargeable progressif dans MPMoviePlayerController

Y a-t-il un moyen de faire en sorte que le contenu téléchargé en amont (que je ne contrôle pas directement) soit mis en cache afin qu'il ne télécharge pas tout le contenu?

Ou Y a-t-il un paramètre de cache global à contrôler? (D'un côté, j'ai utilisé les API ASIHTTP pour contacter mon serveur HTTP et accéder aux données qui permettent la mise en cache).

Merci d'avance.

Répondre

1

Vous pouvez utiliser NSURLConnection pour enregistrer le fichier et le lire.

Exemple:

-(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]; 
} 

Voici le code pour la lecture

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

Avez-vous testé cela fonctionne? – vaughan

+0

Bonjour, avez-vous du succès avec cette solution? – Bkillnest