SDK de iPhone: ¿Cómo se descargan los archivos de video al Directorio de documentos y luego se reproducen?

He estado engañando con el código durante años en este caso, estaría muy agradecido si alguien pudiera proporcionar un ejemplo de código que descargó este archivo de un servidor http://www.archive.org/download/june_high/june_high_512kb.mp4 (Por cierto, no es realmente este archivo, es solo un ejemplo perfecto para cualquiera que intente ayudarme) y luego lo reproduce desde el directorio de documentos. Sé que me da pereza preguntar esto, pero he intentado tantas variaciones diferentes de NSURLConnection que me está volviendo loco. Además, si lograra descargar el archivo de video, estaría en lo cierto al suponer que este código lo reproducirá con éxito:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"june_high_512kb.mp4"]; NSURL *movieURL = [NSURL fileURLWithPath:path]; self.theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; [_theMovie play]; 

Si el código anterior funcionaría al reproducir un archivo de video desde el directorio del documento, entonces supongo que lo único que necesitaría saber es cómo descargar un archivo de video de un servidor. Que es lo que parece ser mi mayor problema. Cualquier ayuda es muy apreciada.

Tu código funcionará para reproducir un archivo de película.

La forma más sencilla de descargar es sincrónicamente:

 NSData *data = [NSData dataWithContentsOfURL:movieUrl]; [data writeToURL:movieUrl atomically:YES]; 

Pero es mejor (para la capacidad de respuesta de la aplicación, etc.) descargar de forma asincrónica:

  NSURLRequest *theRequest = [NSURLRequest requestWithURL:movieUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; receivedData = [[NSMutableData alloc] initWithLength:0]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES]; 

Esto requiere implementar el protocolo informal de NSURLConnection:

 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; [receivedData setLength:0]; } - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [receivedData appendData:data]; } - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; [connection release]; } - (NSCachedURLResponse *) connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { return nil; } - (void) connectionDidFinishLoading:(NSURLConnection *)connection { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; [connection release]; [self movieReceived]; } 

y luego guardando (y reproduciendo) el archivo de película en el método movieReceived.

Si desea descargar videos de manera asíncrona, le sugiero que use la biblioteca ASI, de modo que su aplicación no se bloquee mientras espera a que finalice la descarga.

http://allseeing-i.com/ASIHTTPRequest/

Intereting Posts