2010-11-26 10 views
5

Actualmente estoy usando un AVPlayer, junto con un AVPlayerLayer para reproducir algunos videos. Mientras reproduzco el video, me he registrado para actualizaciones de tiempo cada 30 segundos durante el video. Esto se usa para dibujar un gráfico de la aceleración en ese punto del video y hacer que se actualice junto con el video. El gráfico usa CMTime del video, por lo que si omito una parte diferente del video, el gráfico inmediatamente representa ese punto en el video sin trabajo adicional.AVPlayerLayer - ¿Reprogramando la rueda?

Anywho, hasta donde yo sé, si quiero obtener una interfaz similar a la que ofrece el framework MediaPlayer, tendré que hacerlo yo mismo.

Lo que me pregunto es, ¿hay alguna manera de usar mi AVPlayer con el marco MediaPlayer? (No es que yo pueda ver). O, ¿hay alguna manera de registrarse para actualizaciones incrementales de tiempo con el marco MediaPlayer?

Mi código, si alguien está interesado, sigue:

[moviePlayer addPeriodicTimeObserverForInterval: CMTimeMake(1, 30) queue: dispatch_queue_create("eventQueue", NULL) usingBlock: ^(CMTime time) { 
loopCount = (int)(CMTimeGetSeconds(time) * 30); 
if(loopCount < [dataPointArray count]) { 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
    [graphLayer setNeedsDisplay]; 
    }); 
} 
}]; 

Gracias!

Respuesta

0

Si está hablando de la ventana cromada que muestra MPMoviePlayer, me temo que está buscando crear esta UI usted mismo.

AFAIK no hay forma de lograr el comportamiento de sincronización que necesita utilizando el marco MediaPlayer, que es en gran medida un marco simple de "reproducir algunos medios". Estás haciendo lo correcto al usar AVFoundation.

Lo que hace que necesite crear la IU usted mismo. Mi sugerencia sería comenzar con un archivo XIB para crear el diseño general; barra de herramientas en la parte superior con un botón hecho, una vista grande que representa una vista de reproducción personalizada (usando su AVPlayerLayer) y una vista separada para contener sus controles.

Tendrá que escribir un código de controlador personalizado para mostrar/ocultar automáticamente los controles de reproducción y la barra de herramientas según sea necesario si desea simular la interfaz de usuario de MPMoviePlayer.

+0

Woa. esta respuesta es casi un año más tarde que la pregunta, ¡y aún así me aceptaron! Bravo. – Almo

0

Es posible que desee buscar AVSynchronizedLayer clase. No creo que haya mucho en la guía oficial de programación. Puede encontrar información aquí y allí: subfurther, Otter Software.

En O'Really Programming iOS 4 (o 5) también hay una breve referencia sobre cómo hacer que un cuadrado se mueva/pare a lo largo de una línea en sincronización con la animación. Se muestra otra demostración (no mucho código) durante la sesión WWDC 2011 Working with Media in AV Foundation.

Cuestiones relacionadas