2012-08-08 16 views
5

Tengo un problema con la generación de flujo FLV. Desarrollé un sistema de DVR, y debería poder transmitir video en formato FLV (para reproducirlo en Actionscript NetStream). Recibo video del codificador en unidades NAL H264 sin formato (0x00 0x00 0x00 0x01), también puedo reconocer que es IDR con marco codificado o no IDR.Cómo generar flujo FLV a partir de h264 sin procesar que puede ejecutarse mediante Actionscript NetStream?

Mi solución para crear flujo FLV (basado en las especificaciones de Adobe: Formato de archivo video Specification Version 10) fue:

  1. espera para el marco IDR;
  2. cabecera put FLV
  3. poner PrevTagSize (0)
  4. put etiqueta FLV con datos de vídeo etiqueta de vídeo con AVCVIDEODATA
  5. poner PrevTagSize
  6. repita los pasos 4,5 hasta finales de streaming.

corriente se ve bien, y puede ser reproducida por ffplay, MPlayer, VLC, etc. Pero no jugado por el jugador basado en ActionScript NetStream.

lo tanto, he h264 obtener datos en bruto y convertirlo en FLV usando ffmpeg:

ffmpeg -i -f h264 d1.h264 -vcodec copia d1.flv FLV -f

y Trata de comparar tanto flv's my ffmpeg's.

Antes que nada, veo que ffmpeg agrega un encabezado de secuencia AVC, inmediatamente después del encabezado FLV. Empecé a hacer lo mismo, pero NetStream aún no es compatible con mi transmisión, y también otros jugadores dejaron de jugarlo.

Ok, entonces continúo comparando flv's. Ahora veo que los encabezados de las unidades NAL en el FLV codificado de ffmpeg han cambiado un poco, pero no puedo entender el significado de los cambios. Leí muchas especificaciones, pero nada útil. ¿Alguien me puede aclarar esto?

Fo ejemplo mis unidades NAL se ve tan: 00 00 00 01 XX XX ... - para todas las unidades

FFmpeg NALS: 00 00 [14 BA] 61 ... 9A - no IDR (dos variable de bytes) 00 00 [7A 02] 65 88 ... - IDR (variable de dos bytes) 00 00 00 40 06 05 ... - SEI

¿Se ha agregado algún contador o alguna otra cosa?

estarán encantados de ver cualquier idea, enlaces, etc.

+0

Estoy trabajando en una FLV muxer también y preguntándose cómo almacenar los datos x264_nal_t ​​* que obtuve al codificar usando x264_encoder_encode. ¿Hiciste funcionar tu transmisión? ¿Puedes explicar tu enfoque un poco? – pollux

Respuesta

1

Hay dos formatos de empaquetado flujo de bits H.264 común.

  1. Anexo B contiene códigos de inicio: 00 00 01
  2. MP4 es la longitud prefijada XX XX XX XX

Usted está creando el anexo B, pero parece que necesita formato de embalaje mp4 (longitud de prefijo) para FLV. Debe eliminar (00) 00 00 01 y agregar la longitud como prefijo.

3

Trate de usar comandos para hacer el trabajo:

ffmpeg -y -i test.flv -vcodec copy -vbsf h264_mp4toannexb test.h264 

Usted tiene un archivo reproducible .h264 VLC, todo NAL se comienzan con 00 00 00 01.

Cuestiones relacionadas