2008-09-15 20 views
7

Necesito construir algo que comience a servir un video con codificación H.264 en un reproductor flash a la mitad del archivo (para admitir saltar a un punto en el video que aún no se ha almacenado en el búfer).¿Cómo hacer pseudo-streaming Flash?

Actualmente, los videos están en formato de contenedor FLV, pero la transcodificación es una opción. Logré volver a escribir el encabezado del archivo y la información de metadatos para un desplazamiento de bytes dado. Esto funciona para videos más antiguos, pero no para archivos codificados H.264. Sospecho que esto se debe a que las etiquetas de video dentro del archivo también deben ser alteradas, lo cual no es factible (tomaría demasiada potencia de procesamiento).

¿Cuál es la forma "correcta" de hacerlo?

+0

Pregunta interesante ... Voy a hacer esto yo mismo en las próximas semanas también.¿Podría explicar los problemas que está teniendo con el enfoque de FLV? Pensé que funcionaría bien ... –

Respuesta

2

El flash player solo puede comenzar a reproducir video H.264 una vez que se haya descargado el átomo MOOV. Los proveedores de pseudo-streaming existentes solo le dan un encabezado FLV, ya sea los primeros 13 bytes del archivo o uno codificado, y luego sirven el archivo desde el desplazamiento dado. Si desea crear un pseudo-streamer H.264, necesitará que emita el encabezado FLV, luego un átomo MOOV y luego sirva el resto del archivo a partir del desplazamiento dado. Si no usa un contenedor FLV, no necesitará el encabezado FLV, pero igual necesitará el átomo MOOV.

Desafortunadamente, no creo que puedas usar el átomo MOOV del archivo en el disco; la información que contiene no será correcta para el fragmento de archivo que usted sirve. Por lo tanto, tendría que analizar el átomo existente y generar uno propio que fuera apropiado para la parte servida del archivo.

Si hay estructuras complicadas dentro del archivo H.264, podría ser incluso más complicado pseudo-stream. Si el análisis del archivo no es factible, me temo que es posible que no pueda pseudo-transmitir sus medios.

3

@yoavf - Creo que OP está interesado en los aspectos del lado del servidor de la transmisión de h.264 a pedido dentro de los archivos FLV. La reutilización de jugadores existentes sería agradable para él, creo. ¿O tal vez esa es mi propia necesidad que sale? <: S

Desde el segundo enlace de yoavf, hay otro enlace a Tinic Uro's What just happened to video on the web?. Una cita relevante:

¿Será posible colocar secuencias H.264 en la estructura de archivos FLV tradicional? Lo hará, pero recomendamos encarecidamente a todos que adopten el nuevo formato de archivo estándar. Hay límites funcionales con la estructura FLV cuando se transmite H.264, lo que no podríamos superar sin un rediseño del formato de archivo. Esta es una razón por la que nos alejamos de la estructura de archivos FLV tradicional. Específicamente tratar con encabezados de secuencia y enders es complicado con flujos FLV.

Por lo tanto, parece que uno puede jugar con la codificación ffmpeg (si es así como está obteniendo sus FLV, como yo) o puede obtener el nuevo formato. Hmmmm ....

+0

Como dije, la transcodificación/remixing es una opción. Pero no puedo cortar un archivo y esperar que funcione, afaik. Me gustaría saber cuál es el mejor enfoque. – Sietse

+0

Corto FLVs que no son 264 ¡bien! :) Preparado el encabezado FLV y funciona perfectamente. –

+0

Sí, no 264 Me puse a trabajar, es fácil. pero no tuvo suerte con 264. Y tiene razón, estoy hablando del lado del servidor (y ya estamos usando JW;)) – Sietse

0

dos cosas que puede hacer:

1) usar lighttpd y es mp4 streaming de plug-in que va a generar el contenedor de streaming requerida sobre la marcha

2) crear un FLV de fotogramas clave y utilizar un pseudo secuencia de comandos de secuencia de comandos (como XMOOV) para transmitir su archivo.

si necesita mp4/aac puede simplemente ponerlos dentro del contenedor FLV, para gran disgusto de adobe, pero funciona.