2012-08-08 9 views
5

Ho un problema con la generazione di stream FLV. Ho sviluppato un sistema DVR, che dovrebbe essere in grado di riprodurre video in formato FLV (per riprodurlo su Actionscript NetStream). Ricevo video dal codificatore in unità NAL H264 raw (0x00 0x00 0x00 0x01), anch'io posso riconoscere sia IDR frame codificato che non-IDR.Come generare stream FLV da h264 raw che può essere riprodotto da Actionscript NetStream?

La mia soluzione per creare flusso FLV (basata su Adobe spec: Video formato di file Specification Version 10) è stato:

  1. attesa per IDR telaio;
  2. intestazione put FLV
  3. messo PrevTagSize (0)
  4. put tag FLV con tag video VIDEODATA con AVCVIDEODATA
  5. messo PrevTagSize
  6. ripetere i passaggi da 4,5 fino alla fine dello streaming.

flusso sembra buono, e possono essere riprodotti da ffplay, MPlayer, VLC, ecc ma non interpretato da giocatore sulla base di Actionscript NetStream.

Così, ho ottenere dati grezzi H264 e convertirli in FLV utilizzando ffmpeg:

ffmpeg -f h264 -i d1.h264 -vcodec copiare -f d1.flv flv

e prova a compilare sia flv's my che ffmpeg's.

Prima di tutto vedo che ffmpeg aggiunge l'intestazione di sequenza AVC, immediatamente dopo l'intestazione FLV. Ho iniziato a fare lo stesso, ma NetStream non supporta ancora il mio stream, e anche altri giocatori hanno smesso di riprodurlo.

Ok, allora ho continuato a confrontare flv's. Ora vedo che le intestazioni delle unità NAL nel FLV codificato di ffmpeg sono leggermente cambiate, ma non riesco a capire quale sia il significato delle modifiche. Ho letto molte specifiche, ma niente di utile. Qualcuno può chiarirmi questo?

Fo esempio mie unità NAL sembra così: 00 00 00 01 XX XX ... - per tutte le unità

FFmpeg Nals: 00 00 [14 BA] 61 9A ... - non IDR (due byte variabile) 00 00 [7A 02] 65 88 ... - IDR (variabile due byte) 00 00 00 40 06 05 ... - SEI

c'è aggiunti alcuni contatore o qualsiasi altra cosa?

sarà felice di vedere tutte le idee, link, ecc

+0

sto lavorando su un Anche muxer FLV e mi chiedo come memorizzare i dati x264_nal_t ​​* che ho ottenuto durante la codifica usando x264_encoder_encode. Hai fatto funzionare il tuo flusso? puoi spiegare un po 'il tuo approccio? – pollux

risposta

1

Ci sono due formati di confezionamento bitstream comuni H.264.

  1. allegato B contiene iniziare codici: 00 00 01
  2. MP4 è lunghezza prefissata XX XX XX XX

Si sta creando allegato B ma sembra che tu abbia bisogno formato imballaggio mp4 (lunghezza prefisso) per FLV. Devi rimuovere (00) 00 00 01 e aggiungere la lunghezza come prefisso.

3

Tenta di utilizzare seguente comando per fare il lavoro:

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

Avrete ottenuto un file .h264 giocabile VLC, tutti NAL si inizia con 00 00 00 01.

Problemi correlati