Convertir datos sin procesar en video visualizable para iOS

Tengo un problema interesante que necesito investigar relacionado con la transmisión de video de muy bajo nivel.

¿Alguien ha tenido alguna experiencia en convertir una secuencia de bytes sin formatting (separados por información de píxel, pero no un formatting estándar de video) en una secuencia de video de baja resolución? Creo que puedo asignar los datos al valor RGB por bytes de píxel, ya que los valores de color que corresponden al valor en los datos brutos serán determinados por nosotros. No estoy seguro de dónde ir desde allí, o qué formatting RGB debe ser por píxel.

He mirado FFMPeg pero su documentation es masiva y no sé por dónde empezar.

Las preguntas específicas que he incluido, ¿es posible crear CVPixelBuffer con esos datos de píxeles? Si tuviera que hacer eso, ¿qué tipo de formatting para los datos por píxel tendría que convertir?

Además, debería search más en OpenGL y, de ser así, ¿dónde estaría el mejor lugar para search información sobre este tema?

¿Qué pasa con CGBitmapContextCreate? Por ejemplo, si fui, fui con algo como esto , ¿cómo se vería un píxel típico de un byte? ¿Sería esto lo suficientemente rápido como para mantener la velocidad de fotogtwigs por encima de 20 fps?

EDITAR :

Creo que con la excelente ayuda de ustedes dos y algunas más investigaciones por mi count, he elaborado un plan sobre cómo build los datos RGBA sin procesar, luego construyo una CGImage a partir de esos datos, a su vez creo un CVPixelBuffer desde esa CGImage desde aquí CVPixelBuffer desde CGImage .

Sin embargo, para luego reproducirlo en vivo a medida que entran los datos, no estoy seguro de qué tipo de FPS estaría mirando. ¿Los pinto a un CALayer, o hay alguna class similar a AVAssetWriter que podría usar para reproducirlo cuando agrego CVPixelBuffers? La experiencia que tengo es usar AVAssetWriter para exportar jerarquías de CoreAnimation construidas al video, por lo que los videos siempre se construyen antes de que comiencen a reproducirse, y no se muestran como video en vivo.

Lo he hecho antes, y sé que encontraste mi proyecto GPUImage hace un time. Cuando respondí sobre los problemas allí, la GPUImageRawDataInput es lo que quieres para esto, ya que realiza una carga rápida de datos RGBA, BGRA o RGB directamente en una textura OpenGL ES. Desde allí, los datos del marco se pueden filtrar, mostrar en la pantalla o grabar en un file de película.

La ruta propuesta para pasar de una image CG a una CVPixelBuffer no va a rendir muy bien, en function de mi experiencia personal. Hay demasiados gastos al pasar por Core Graphics para video en time real. Desea ir directamente a OpenGL ES para get la velocidad de visualización más rápida aquí.

Incluso podría mejorar mi código para hacerlo más rápido de lo que es ahora. Actualmente utilizo glTexImage2D() para actualizar los datos de textura de los bytes locales, pero probablemente sea incluso más rápido usar las cachings de textura introducidas en iOS 5.0 para acelerar la actualización de datos dentro de una textura que mantiene su tamaño. Hay algunos gastos generales en la creación de cachings que los hace un poco más lentos para cargas únicas, pero la actualización rápida de los datos debería ser más rápido con ellos.

Mis 2 centavos:

Hice un juego opengl que permite al usuario grabar una escena en 3D. La reproducción se realizó mediante la reproducción de la escena (en lugar de reproducir un video porque la encoding en time real no produjo un FPS cómodo.

Hay una técnica que podría ayudar, lamentablemente no tuve time de implementarlo: http://allmybrain.com/2011/12/08/rendering-to-a-texture-with-ios-5-texture- cache-api /

Esta técnica debería networkingucir el time al recuperar los píxeles de openGL. Puede get una tasa de encoding de video aceptable.