2010-12-17 13 views
9

De acuerdo con este What Techniques Are Best To Live Stream iPhone Video Camera Data To a Computer? es posible obtener datos comprimidos de la cámara iphone, pero como he estado leyendo en la referencia de AVFoundation, solo obtiene datos sin comprimir.¿Cuál es la mejor forma de transmitir en vivo la cámara de iphone a un servidor de medios?

Así que las preguntas son:

1) Como llegar tramas comprimidas y el audio de la cámara del iPhone?

2) La codificación de marcos sin comprimir con la API de ffmpeg es lo suficientemente rápida para la transmisión en tiempo real?

Cualquier ayuda será muy apreciada.

Gracias.

+1

¿Cómo resolvió esto? – DivineDesert

+0

Terminé obteniendo datos sin comprimir (marcos y audio) de AVFoundation y codificación + streaming usando la API de FFmpeg. Funciona bastante bien en el iPhone 4, obteniendo hasta 30 FPS con una resolución de 192x240. En resoluciones más altas, deja caer demasiados marcos. –

+0

@AlexandreOS Cómo hacer esto, por favor compártelo. Es útil para nosotros, gracias – Ron

Respuesta

8

Lo más probable es que ya sabes ....

1) Como llegar tramas comprimidas y el audio de la cámara del iPhone?

No puede hacer esto. La API AVFoundation ha impedido esto desde todos los ángulos. Incluso probé tubos con nombre, y algunos otros furtivos unix foo. No tal suerte. No tienes más remedio que escribirlo en el archivo. En su publicación vinculada, un usuario sugiere configurar la devolución de llamada para entregar marcos codificados. Hasta donde yo sé, esto no es posible para las transmisiones H.264. El delegado de captura entregará imágenes codificadas en un formato de píxel específico. Son los Movie Writers y AVAssetWriter los que hacen la codificación.

2) la codificación de tramas no comprimidas con el API del ffmpeg es lo suficientemente rápido para la transmisión en tiempo real?

Sí, lo es. Sin embargo, tendrá que usar libx264 que lo lleva al territorio GPL. Eso no es exactamente compatible con la tienda de aplicaciones.

Sugeriría usar AVFoundation y AVAssetWriter por razones de eficiencia.

+3

En realidad 1 está parcialmente mal. Escribí una biblioteca que entrega datos H.264 en tiempo real, ya que está codificado sin usar una API privada. –

+1

¿Podría compartir esta biblioteca con nosotros? Sería muy bueno tener una forma alternativa de obtener estos flujos H.264 sin usar libx264. Es por eso que terminé usando códecs MPEG de FFmpeg. –

+0

@AlexandreOS Desafortunadamente, mi biblioteca solo tiene licencia comercial. Es posible que en el futuro lo libere bajo una licencia dual. –

4

Estoy de acuerdo con Steve. Agregaría que al intentar con la API de Apple, vas a tener que hacer una piratería seriamente desagradable. AVAssetWriter por defecto pasa un segundo antes de derramar su búfer al archivo. No he encontrado una manera de cambiar eso con la configuración. La solución parece ser forzar la escritura de archivos pequeños y el cierre de archivos con el uso de múltiples AVAssetWriters. Pero eso introduce mucha sobrecarga. No es lindo.

Demuestre definitivamente una nueva solicitud de función con Apple (si es un desarrollador de iOS). Cuantos más usuarios tengamos, más probable es que agreguen algún tipo de escritor que pueda escribir en un búfer y/o en una transmisión.

Una adición que haría a lo que dijo Steve sobre el problema x264 GPL es que creo que se puede obtener una licencia comercial por eso que es mejor que la GPL, pero por supuesto le cuesta dinero. Pero eso significa que aún puede usarlo y obtener resultados bastante buenos, y no tener que abrir su propia fuente de la aplicación. No es tan bueno como una API de Apple aumentada usando sus códecs de hardware, pero no está mal.

Cuestiones relacionadas