2012-08-08 19 views
5

Mam problem z generowaniem strumienia FLV. Opracowałem system DVR, powinien być w stanie przesyłać strumieniowo wideo w formacie FLV (aby odtwarzać je w Actionscript NetStream). Dostaję wideo z kodera w surowych jednostkach NAL H264 (0x00 0x00 0x00 0x01), również rozpoznaję kodowany IDR ramki lub nie IDR.Jak wygenerować strumień FLV z surowego h264, który może być odtwarzany przez Actionscript NetStream?

Moje rozwiązanie do tworzenia strumienia FLV (w oparciu o Adobe specyfikacji: Video Format pliku Specification Version 10) został:

  1. czekać na IDR ramy;
  2. nagłówek put FLV
  3. umieścić PrevTagSize (0)
  4. put tag tag wideo FLV z wizyjne z AVCVIDEODATA
  5. umieścić PrevTagSize
  6. powtórz kroki od 4,5 aż do końca transmisji strumieniowej.

Stream wygląda dobrze i mogą być odtwarzane przez ffplay, MPlayer, VLC, itp Ale nie grał przez gracza na podstawie ActionScript NetStream.

Więc mam uzyskać dane surowe H264 i przekonwertować go do FLV za pomocą ffmpeg:

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

i spróbuj obliczyć zarówno flv's my, jak i ffmpeg.

Przede wszystkim widzę, że ffmpeg dodaje nagłówek sekwencji AVC, bezpośrednio po nagłówku FLV. Zacząłem robić to samo, ale NetStream wciąż nie obsługuje mojego strumienia, a także inni gracze przestali go odtwarzać.

OK, a następnie kontynuuję porównanie flv. Teraz widzę, że nagłówki jednostek NAL w zakodowanym FLFmpeg nieco się zmieniły, ale nie mogę zrozumieć, co oznaczają zmiany. Czytam wiele specyfikacji, ale nic nie pomaga. Czy ktoś mógł mi to wyjaśnić?

Fo przykład moje jednostki NAL wygląda tak: 00 00 00 01 xx xx ... - dla wszystkich jednostek

FFmpeg NALS: 00 00 [14 BA] 61 9A ... - non IDR (dwa bajtów) 00 00 [7A 02] 65 88 ... - IDR (zmienna dwubajtowa) 00 00 00 40 06 05 ... - SEI

Czy dodano licznik lub cokolwiek innego?

Będzie szczęśliwy widząc żadnych pomysłów, linki itp

+0

ja pracuję nad MyXer FLV i zastanawiam się, jak przechowywać dane x264_nal_t ​​*, które otrzymałem podczas kodowania za pomocą x264_encoder_encode. Czy Twój strumień działa? czy możesz nieco wyjaśnić swoje podejście? – pollux

Odpowiedz

1

Istnieją dwa formaty opakowań bitstream wspólny H.264.

  1. Załącznik B zawiera uruchomić kody: 00 00 01
  2. MP4 jest długość prefiksem xx xx xx xx

Tworzycie załącznik B, ale wydaje się, że trzeba Format pakowania mp4 (długość prefiksem) dla FLV. Musisz usunąć (00) 00 00 01 i dodać długość jako przedrostek.

3

spróbować użyć następującego polecenia, aby wykonać pracę:

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

będą masz vlc Odtwarzany plik .h264, wszystkie NAL jest rozpocząć z 00 00 00 01.