2009-09-09 22 views
21

Grabé un video con una pantalla azul. Tenemos el software para convertir ese video a un fondo transparente. ¿Cuál es la mejor manera de reproducir este video superpuesto en una UIView personalizada? Cada vez que he visto videos en el iPhone siempre se inicia esa interfaz de jugador. ¿Alguna forma de evitar esto?iPhone SDK - ¿Cómo reproducir un video con transparencia?

Gracias!

+0

Hola Adam, ¿Puedes decirme qué software estás utilizando para hacer que el video tenga un fondo transparente? – Froyo

Respuesta

0

La única forma de evitar el uso de la interfaz del reproductor es rodar su propio reproductor de video, lo cual es bastante difícil de hacer bien. Puede insertar una superposición personalizada en la parte superior de la interfaz del reproductor para que parezca que el usuario todavía está en su aplicación, pero no tiene control de la vista. Es posible que desee intentar reproducir su video transparente en la interfaz del reproductor y ver si se muestra como transparente. Vea si hay una propiedad para el color de fondo en el reproductor. También querrás establecer que sea transparente.

--Mike

0

no estoy seguro de que el iPhone API le permitirá tener una visión de la película sobre la parte superior de otro punto de vista y aún así tener transparencia.

-3

No puede evitar el inicio de la interfaz del reproductor si desea utilizar el reproductor incorporado.

Esto es lo que me gustaría probar:

  • obtener la nueva ventana que se crea por MPMoviePlayerController (see here)
  • explorar la jerarquía de la vista en esa ventana, usando [subvistas ventana] y [Ver subvistas]
  • tratar de averiguar cuál de estos puntos de vista es la vista de los jugadores reales
  • intenta insertar una vista detrás de la vista del reproductor (sendSubviewToBack)
  • averiguar si t El jugador admite transparencia o no.

No creo que pueda hacer mucho mejor que esto sin escribir su propio reproductor, y no tengo idea de si este método funcionaría o no.

Dependiendo del tamaño de tus videos y de lo que trates de hacer, también podrías intentar jugar con los GIF animados.

-3

si pudieras extraer los cuadros de tu video y guardarlos como imágenes, entonces tu video podría reproducirse cambiando las imágenes. Aquí está un ejemplo de cómo se puede reproducir sus imágenes para que se vea como un video:

enter image description here

en esta imagen que he subido los nombres de las imágenes tienen un nombre diferente, pero si el nombre de sus imágenes como : frame1, fram2, fram3 ... entonces podrías colocar eso dentro de un bucle.

Nunca lo he probado, solo sé que funciona para animaciones simples. Espero que funcione.

3

Tendrá que crear un reproductor personalizado utilizando AVFoundation.framework y luego usar un video con canal alfa. El marco AVFoundation permite una manipulación mucho más robusta de video sin muchas de las limitaciones de MPMedia Framework. Crear un jugador personalizado no es tan difícil como la gente cree.He escrito un tutorial aquí: http://www.sdkboy.com/?p=66

+1

link dead, la respuesta se volvió inútil ... aparte del hecho de que AVFoundation nunca admitió la reproducción de canal alfa de la caja. – Till

+1

El enlace parece funcionar para mí. –

1

Supongo que lo que estás tratando de hacer es quitar la pantalla azul en tiempo real de tu video: tendrás que reproducir el video a través de OpenGL, ejecute sombreadores de píxeles en los marcos y finalmente renderice todo utilizando una capa OpenGL con un fondo transparente.

Consulte la sesión Capturing from the Camera using AV Foundation on iOS 5 de WWDC 2011 que explica las técnicas para hacer exactamente eso (ver Demo de Chroma Key a las 9:00). Es de suponer que la fuente se puede descargar pero no puedo encontrar el enlace ahora mismo.

8

No sabe si alguien todavía está interesada en este aparte de mí, pero yo estoy usando GPUImage y el filtro Chromakey para lograr este ^^ https://github.com/BradLarson/GPUImage

EDIT: código de ejemplo de lo que hice (puede ser de fecha ahora):

-(void)AnimationGo:(GPUImageView*)view { 
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mov"]; 

    movieFile = [[GPUImageMovie alloc] initWithURL:url]; 
    filter = [[GPUImageChromaKeyBlendFilter alloc] init]; 

    [movieFile addTarget:filter]; 

    GPUImageView* imageView = (GPUImageView*)view; 
    [imageView setBackgroundColorRed:0.0 green:0.0 blue:0.0 alpha:0.0]; 
    imageView.layer.opaque = NO; 
    [filter addTarget:imageView]; 

    [movieFile startProcessing]; 

    //to loop 
    [imageView setCompletionBlock:^{ 
     [movieFile removeAllTargets]; 
     [self AnimationGo:view]; 
    }]; 
} 

que pude haber tenido que modificar GPUImage un poco, y puede que no funcione con la última versión de GPUImage pero eso es lo que utilizamos

+0

¿El rendimiento de la reproducción es uniforme? – zakdances

+0

muy. Tuve que hacer algunos cambios en GPUImage para que funcionara en bucle, pero el resto era simplemente drop-in. ^^ –

+0

¿Puedes reproducir el video y aplicar el filtro al mismo tiempo? (en otras palabras, transformación en tiempo real) – zakdances

1

el GPUImage quiere trabajar, pero no es perfecto porque el dispositivo iOS no es el lugar para hacerlo su procesamiento de video Debe hacer todo lo que esté en el escritorio con una herramienta de video profesional que maneje chromakey y luego exporte un video con un canal alfa. A continuación, importe el video en su paquete de aplicaciones iOS como se describe en playing-movies-with-an-alpha-channel-on-the-ipad. Hay una gran cantidad de problemas de calidad y tiempo de carga que puede evitar al asegurarse de que su video se convierta correctamente en un video de canal alfa antes de que se cargue en el dispositivo iOS.

+4

Podríamos debatir sobre la calidad, pero en términos de rendimiento, las operaciones de chroma keying en GPUImage son todos simples sombreadores OpenGL ES. Funcionan a 60 FPS para todos los videos, excepto para los más grandes, incluso en dispositivos iOS más antiguos. La sobrecarga es insignificante en comparación con el tiempo de decodificación de video. ¿Cómo se compara AVAnimator con la decodificación acelerada por hardware en AV Foundation cuando se trata del rendimiento de la reproducción? –

+0

El problema con ChromaKey es cuando hay problemas con el video fuente, como por ejemplo http://www.sonycreativesoftware.com/solving_tough_keying_problems_in_vegas_software. Si viviéramos en un mundo perfecto, entonces todo el video sería perfecto y nunca habría problemas.Pero, hacer su procesamiento de video en la tarjeta gráfica significa que es realmente difícil de detectar cuando hay problemas. Puede verse bien en un modelo de iPhone, pero puede verse mal en el iPad. Mi punto es que estos problemas ya han sido resueltos en el escritorio con paquetes de video profesionales. – MoDJ

+0

En cuanto al rendimiento, AVAnimator simplemente hace un blit de la memoria asignada o una carga de la memoria mapeada en una textura sin una transferencia a la tarjeta gráfica (CoreGraphics implementa esto), por lo que también puede obtener resultados de 60 FPS. El tiempo para decodificar una h.264 en realidad puede tomar más tiempo para comenzar cuando se compara con AVAnimator, pero AVAnimator tiene que decodificar desde un recurso de proyecto 7zip para comenzar, así que realmente depende de la forma en que se configure la aplicación. – MoDJ

Cuestiones relacionadas