2012-01-12 13 views
5

al reproducir un video dentro de una vista web y mirar instrumentos: veo un pico alto de uso de memoria al jugar. (Alrededor de 23 MB en total)Video simple en webView y consumo de memoria

Cuando dejo la vista (está en una vista de UINavigation), toda la memoria se borra como debería. (usando ARC)

IMPORTANTE: ¡Estoy cargando el video desde el DISCO y no lo estoy cargando desde el servidor!

Pregunta: ¿Hay alguna manera de reducir la memoria al reproducir el video?

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
// 

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: videoURL cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval: 10.0]; 
[webView loadRequest: request]; 
[webView setOpaque:NO]; 

enter image description here

+0

¿Qué tan grande es el archivo de video? ¿Qué códec estás usando? – Luke

+0

formato mp4, diferentes códecs (en cada momento hay un video diferente cargado por lo que el códec puede cambiar), el tamaño es cualquier cosa desde 4mb a 20mb por archivo de video – chewy

Respuesta

1

Desde su código me parece que está intentando utilizar un UIWebView como un reproductor de vídeo, sin mostrar ningún otro contenido HTML en ella al mismo tiempo.

Aunque esto es bastante posible, como ha observado, no es particularmente eficiente, un UIWebView cargará todo su contenido en la memoria ya que fue creado para mostrar páginas web.

Una mejor solución sería utilizar el marco de MediaPlayer de Apple, es decir, MPMoviePlayerController y/o MPMoviePlayerViewController.

Si solo necesita reproducir el video de pantalla completa , debe usar MPMoviePlayerViewController. Su uso es simple:

MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL]; 
[self presentMoviePlayerViewControllerAnimated:vc]; 
[vc release]; 

Esto presentará un controlador de vista modal que contiene su clip. Si desea personalizar cualquier parte de él, puede usar la propiedad moviePlayer.

Si prefiere mostrar el video dentro de otra vista, debe consultar MPMoviePlayerController. El uso de esta clase implica más texto estándar, pero también le brinda más control:

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
[player prepareToPlay]; 
player.view.frame = contentView.bounds; //The Player View's Frame must match the Parent View's 
// ... 
[player play]; 
+0

Gracias por la respuesta, sin embargo, me refiero al uso de memoria que es más o menos igual al usar MediaPlayer. He probado ambos y el consumo de memoria sigue siendo muy alto (20 MB cuando se reproduce) – chewy

Cuestiones relacionadas