2010-08-30 14 views
24

El iPad/iOS tiene soporte de transmisión de video para, p. Ej. H.264 usando MPMoviePlayerController etc., pero recibo datos H.264 a través de un flujo personalizado, propietario, y necesito decodificarlo en un escenario blando en tiempo real.
¿Se puede acceder al decodificador de video de los iPads/iOS de alguna forma para decodificar estos datos?¿Acceso al descodificador de video de iOS?

Actualización: Al parecer, el IOS 4.0 Core Media Framework supports decoding frames y sabe de H.264, pero no hay un código de ejemplo ni puedo ver lo que en realidad se supone que llamar para la decodificación real.

+1

AVAssets todavía no son compatibles con la transmisión. Parece que el Core Media Framework de bajo nivel es el lugar para buscar. El códec H.264 se define allí, lo cual es una buena señal, y existen estructuras de almacenamiento en bloque en las que no tiene que almacenar todo el activo en la memoria o en el disco. Me gustaría ver el código de cualquier parte de esto, especialmente para la parte donde un buffer de muestra se coordina con una capa o capturado. –

+0

@Peter: Gracias, eso parece más prometedor. Parece que se supone que admite la decodificación a 'CVImageBuffer', pero realmente no veo qué funciones son para la decodificación real. –

+0

¿No te ayudó la demostración de MoviePlayer? http://developer.apple.com/iphone/library/samplecode/MoviePlayer_iPhone/Introduction/Intro.html – karlphillip

Respuesta

9

Después de plantear el problema con Apple DTS, resulta que actualmente no hay forma de descodificar los datos de video de fuentes de secuencias personalizadas.

Voy a presentar una solicitud de mejora para esto.

+0

¿La solicitud de mejora está abierta al público? Me gustaría votar por él :) – Gili

+0

@Gili: No, pero podría simplemente abrir una solicitud de error/mejora en esto también. –

+0

Hola, Georg. Sé que ha pasado bastante tiempo desde entonces, pero todavía no hay una buena respuesta para esta pregunta. ¿Podría compartir si hay alguna forma de utilizar fuentes de transmisión personalizadas? ¡Un millón de gracias! –

1

¿Ha intentado escribir la secuencia H.264 que recibe de su protocolo en un archivo temporal al que se agrega continuamente, y luego una vez que ha escrito suficientes bytes para evitar la reproducción en búfer, pasando la url de su archivo temporal a MPMoviePlayerController?

4

Si continúa teniendo problemas con él, le sugiero que tome un vistazo a libavcodec para la decodificación de los datos (disponibles en el ffmpeg project).

Hay excelentes tutoriales de ffmpeg en dranger que muestran cómo decodificar correctamente (a través de libavcodec) y mostrar datos de video (usando libsdl), entre otras cosas.

+0

No estaba buscando alternativas en este momento, pero gracias de todos modos. –

+0

Interesante. Sin embargo, libavcodec es LGPL, por lo que, según tengo entendido, no se puede usar para aplicaciones iOS comerciales (ya que debe estar vinculado de forma estática). ¿O malinterpreto algo? – Sander

+1

Este [hilo fino] (https://news.ycombinator.com/item?id=3341852) analiza algunos de los problemas. – karlphillip

0

Con iOS 8, puede usar la caja de herramientas de video (https://developer.apple.com/reference/videotoolbox) para decodificar H264 en cuadros sin procesar. Las API de VT están aceleradas por hardware y le proporcionarán un rendimiento mucho mejor en comparación con libavcodec. Si desea reproducir los cuadros o generar una vista previa, puede usar un renderizador basado en eagl para jugar. He escrito una aplicación de muestra para codificar los fotogramas de raw a h.264 (https://github.com/manishganvir/iOS-h264Hw-Toolbox). h.264 a raw no debería ser tan difícil!

Cuestiones relacionadas