Как сгенерировать FLV-поток из необработанного h264, который можно воспроизвести с помощью Actionscript NetStream?

У меня проблема с генерацией потока FLV. Я разработал систему DVR, и она должна иметь возможность передавать потоковое видео в формате FLV (для воспроизведения на Actionscript NetStream ). Я получаю видео от кодировщика в необработанных единицах NAL H264 (0x00 0x00 0x00 0x01 ), также я могу распознать закодированный кадр IDR или не -IDR.

Мое решение для создания потока FLV (на основе спецификации Adobe :Спецификация формата видеофайла версии 10 )было :

  1. . дождитесь кадра IDR;
  2. поставить заголовок FLV
  3. поставить PrevTagSize (0)
  4. поместите тег FLV с тегом видео VIDEODATA с AVCVIDEODATA
  5. поставить PrevTagSize
  6. повторите шаги 4,5 до конца потоковой передачи.

Стрим выглядит хорошо, и его можно воспроизводить с помощью ffplay, mplayer, vlc и т. д. Но не воспроизводится плеером на основе Actionscript NetStream.

Итак, я получил необработанные данные h264 и преобразовал их в FLV с помощью ffmpeg :

. ffmpeg -f h264 -i d1.h264 -копия vcodec -f flv d1.flv

и попытайтесь сравнить как flv, так и ffmpeg.

Прежде всего, я вижу, что ffmpeg добавляет заголовок последовательности AVC сразу после заголовка FLV. Я начал делать то же самое, но NetStream по-прежнему не поддерживает мой поток, а также другие плееры перестали его воспроизводить.

Хорошо, тогда я продолжу сравнивать flv. Теперь я вижу, что заголовки блоков NAL в закодированном ffmpeg FLV немного изменились, но я не могу понять, в чем смысл изменений. Я прочитал много спецификаций, но ничего полезного. Кто-нибудь может прояснить мне это?

Например, мои блоки NAL выглядят так :00 00 00 01 XX XX... -для всех блоков

FFmpeg NAL :00 00 [14 ВА] 61 9А...-не IDR (двухбайтовая переменная )00 00 [7A 02] 65 88... -IDR (двухбайтовая переменная )00 00 00 40 06 05... -СЭИ

Там добавлен какой-то счетчик или что-то еще?

Буду рад любым идеям, ссылкам и т.д.

5
задан Pyih 8 August 2012 в 10:34
поделиться