Cómo implementar la especificación HTTP Streaming de Adobe sin necesidad de utilizar su servidor de streaming

StackOverflow https://stackoverflow.com/questions/4443146

Pregunta

A partir de Flash 10.1, han añadido la capacidad de añadir bytes en el objeto NetStream a través del método appendBytes (descrito aquí http://www.bytearray.org/?p=1689 ). La razón principal de esto es que, además de Adobe finalmente está apoyando HTTP de streaming de vídeo. Esto es muy bueno, pero parece que es necesario utilizar Adobe Media Streaming Server ( http: // www .adobe.com / productos / httpdynamicstreaming / ) para crear los trozos de vídeo correctos con su video existente para permitir la transmisión sin interrupciones.

Me han tratado de hacer una versión hackeada de transmisión HTTP en el pasado en el que intercambiar objetos NetStream (similar a la aquí http://video.leizhu.com/video.html ), pero siempre hay una pausa momentánea entre los trozos. Con las nuevas appendBytes, he intentado hacer una maqueta rápida con las dos secciones de vídeo desde el sitio anterior, pero aún así, el saltar todavía permanece.

¿Alguien sabe cómo las dos necesidades archivos FLV consecutivos para ser formateados para que el método appendBytes en el objeto NetStream para crear un buen video suave, sin un salto notable entre los segmentos?

¿Fue útil?

Solución

Yo era capaz de conseguir este trabajo mediante Archivo de Adobe Packager herramienta que describe Samuel. Yo no utilizar el objeto NetStream pero utilicé la Muestra OSMF jugador que yo supongo que utiliza esta internamente. Aquí está cómo hacerlo con y sin el uso de FMS:

  1. Obtener Empaquetador de archivos de Adobe para HTTP Dynamic Streaming de http://www.adobe.com/products/ httpdynamicstreaming /
  2. ejecute el archivo Packager en un archivo MP4 existente que contiene H.264 / AAC la siguiente manera: C: \ Archivos de programa \ Adobe \ Flash Media Server 4 \ herramientas \ f4fpackager> f4fpackager.exe --input-file = "MyFile.mp4" --segment duración = 30

Esto dará lugar a 30 segundos archivos F4F largos, también F4X y un archivo F4M. Los archivos se F4F su segmentados correctamente (y fragmentados) archivos MP4 que deben desempeñar. Si desea probar esto usando el jugador OSMF haga también lo siguiente:

  1. Obtener servidor Apache
  2. Obtener Módulo Origen del HTTP de Adobe para Apache desde http://www.adobe.com/products/httpdynamicstreaming /
  3. Instalar el módulo según http: //help.adobe .com / en_US / HTTPStreaming / 1,0 / Uso / WS8d6ed60bd880807c48597a9e1265edd6cc0-8000.html
  4. Poner el F4F, F4X y el archivo en el directorio F4M VOD bajo httpdocs
  5. Obtener el “OSMF Muestra jugador para HTTP Dynamic Streaming” de http: //www.osmf. org / descargas / OSFMPlayer_zeri2.zip
  6. Coloque la muestra de jugador en el directorio httpdocs
  7. Abre el archivo HTML de la muestra Player en un navegador por ejemplo http: //localhost/OSMFPlayer.html
  8. Pulse el botón de expulsión y poner en el URL de su archivo F4M, que debe jugar

Así que para responder a la pregunta original del archivo de Adobe Packager es el divisor de archivo de uso, no es necesario comprar FMS para usarlo y funciona para archivos FLV y MP4 / F4V.

Otros consejos

No es necesario usar su servidor. Wowza admite la versión de Adobe de HTTP Streaming y se puede aplicar por sí mismo mediante la segmentación de los vídeos correctamente y cargar todos los segmentos en un servidor HTTP estándar.

Los enlaces a todas las especificaciones de Adobe HTTP Streaming está aquí:

http://help.adobe.com/ en_US / HTTPStreaming / 1,0 / Uso / WS9463dbe8dbe45c4c-1ae425bf126054c4d3f-7fff.html

que intenta cortar el cliente para hacer un poco de estilo personalizado transmisión HTTP va a ser mucho más problemático.

Tenga en cuenta que HTTP Streaming no soporta la transmisión de varios videos diferentes, pero transmite un único archivo que fue interrumpida en segmentos separados.

Archivo empaquetador

Una herramienta de línea de comandos que se traduce archivos multimedia bajo demanda en fragmentos y escribe los fragmentos de archivos F4F. El empaquetador de archivo es una herramienta en línea. Puede utilizar el archivo Packager para cifrar archivos para su uso con Flash Access. Para obtener más información, vea el embalaje multimedia bajo demanda.

El archivo Packager está disponible en adobe.com y se instala con Adobe® Flash® Media Server a la carpeta rootinstall / herramientas / f4fpackager.

empaquetador de enlace de descarga está a la derecha aquí: Descargar Empaquetador de archivos para HTTP Dynamic Streaming

http://www.adobe.com/products/httpdynamicstreaming/

F4Pack , que es una interfaz gráfica de usuario alrededor de la línea de comandos de herramientas de Adobe, que permite procesar su archivo FLV / F4V para que puedan ser utilizados para HTTP Dynamic Streaming.

El lugar en el código OSMF donde esto sucede es la máquina de estados dentro de temporizador como combustible de la implementación de la clase HTTPNetStream ... podría ser una lectura informativa. Creo que incluso me pongo unos comentarios útiles en allí cuando lo escribí.

En cuanto a la pregunta general:

Si se lee un archivo completo FLV en un ByteArray y pasarlo a appendBytes, se reproducirá. Si se rompe ese archivo FLV a la mitad, y pasa la primera mitad de una matriz de bytes y luego la segunda mitad como una matriz de bytes, que va a jugar tan bien.

Si usted quiere ser capaz de cambiar entre alrededor de tasas de bits sin una brecha, es necesario dividir los archivos FLV en juego puntos de fotogramas clave ... y recordar que sólo la primera llamada a appendBytes tiene el encabezado del archivo FLV inicial (' F', 'L', 'V', banderas, offset) ... el resto sólo espera una continuación de la secuencia de bytes FLV.

He encontrado recientemente un proyecto similar para Node.js para lograr la transcodificación M3U8 (https://github.com/andrewschaaf/media-server) pero aún tienen que escuchar del otro fuera de Wowza hacerlo fuera del módulo de Origen para Apache. Dado que las cargas útiles son casi idénticos eres mejor en busca de una buena segmentación mp4 solución (un montón por ahí) de buscar segmentación F4M. El problema es especialmente átomos moov en mayor mp4 video son difíciles de manejar y poner en su correcta inicial (cerca de inicio de archivo) ubicación. Incluso el uso óptimo ffmpeg configuración y 'qtfaststart' se termina con notablemente más lento que buscan, el uso de ancho de banda ineficiente (por lo general codiciosos), y algunos dolores de cabeza leves relacionados con lavado / hora que no se consigue con FLV / F4V reproducción.

En mi jugador tenga o la intención de cambiar entre HTTP Dynamic Streaming (HDS) y MP4 basado en la carga y en tiempo real de registro de análisis Apache usando awk / cron en lugar de la concesión de licencias de productos de acceso de Adobe para la protección de corriente .. ambos tienen singular 'onMetaData' manipuladores .. pero al final me reciben los hashes de tiempo / byte secuenciadas prácticamente equivalente. MP4 simplemente es más lento. Así mod_origin es sólo un router sincronizador / solicitud de clientes de Flash (por HTTP). Todavía estoy buscando formas de acelerar la reproducción basada en mp4-contenedor. Una solución increíble que lea este recientemente y era bastante impresionados por lo http: // zehfernando .com / 2011 / flash-video-frame-tiempo-males / donde un editor de vídeo (chico) y desarrollador de flash se acercó con su propia solución mp4 timecoding que, literalmente, agregó (a través de la escritura de Adobe Premiere) alrededor de 50 píxeles a la parte inferior de cada cuadro de video con un sello visual 'binario' como un código de barras del marco .. y esos valores binarios traducirse en valores de código de tiempo de gran precisión. Por lo que Flash podría analizar los fotogramas de vídeo, ya que fueron pintadas (en tiempo real) y determinar con precisión dónde estaba el jugador y lo que se necesitaba bytes de cualquier tipo de servidor web mp4 byte-segmentación de usar. La cosa es (y tal vez estoy equivocado aquí) parece flash para elegir arbitrariamente cuando se llega a Moov datos, especialmente en los grandes archivos de vídeo (.5-1.5gigs). Incluso si se asegura de hacer funcionar su mp4 a través MP4Box (es decir MP4Box -frag 10000 -inter 0 movie.mp4) Creo que este ha sido un problema y OSMF HDS han trabajado en bastante bien Ahora, a pesar de que es molesto que necesita Apache y un módulo de código cerrado patentado para la usan imo. Es probablemente sólo una cuestión de tiempo antes de implementaciones de código abierto que lleguen lo HDS es sólo 1-2 años de edad, y que sólo se necesita un poco de ingeniería inversa como ese tipo Andrew Chaaf con Node.js + mpegts de streaming (en directo o no). Al final he sólo puede terminar usando OSMF exclusivamente bajo mi interfaz de usuario, ya que parece que tiene virtudes similares a HDS si no más, es decir, Strobe si necesita HDS extensibles enfermos o MP4 plataforma de jugador abierta a cortar de darse cuenta de su propio reproductor personalizado.

formato de F4F de Adobe se basa en archivos MP4, que son capaces de utilizar F4V o MP4 en lugar de archivos FLV? Hay un montón de División de archivos MP4 alrededor pero que tendrían que asegurarse de que las marcas de tiempo en los archivos son continuas, tal vez la pausa que sucede cuando se ve una marca de tiempo cero dentro de la secuencia de audio o vídeo dentro del archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top