У меня проблема с созданием потока FLV. Я разработал систему DVR, которая должна иметь возможность передавать потоковое видео в формате FLV (для воспроизведения в ActionScript NetStream). Я получаю видео от кодировщика в необработанных единицах H264 NAL (0x00 0x00 0x00 0x01), также я могу распознать кодированный кадр IDR или не-IDR.
Мое решение для создания потока FLV (на основе спецификации Adobe: спецификация формата видеофайла версии 10) было:
- ждать кадра IDR;
- поместите заголовок FLV
- положить PrevTagSize (0)
- поместите тег FLV с тегом видео VIDEODATA с AVCVIDEODATA
- поставить PrevTagSize
- повторите шаги 4,5 до конца потоковой передачи.
Stream выглядит хорошо и может воспроизводиться с помощью ffplay, mplayer, vlc и т. Д., Но не воспроизводится плеером на основе ActionScript NetStream.
Итак, я получил необработанные данные h264 и преобразовал их в FLV с помощью ffmpeg:
ffmpeg -f h264 -i d1.h264 -vcodec copy -f flv d1.flv
и попробуйте сравнить как flv my, так и ffmpeg.
Прежде всего я вижу, что ffmpeg добавляет заголовок последовательности AVC сразу после заголовка FLV. Я начал делать то же самое, но NetStream все еще не поддерживает мой поток, а также другие игроки перестали его воспроизводить.
Хорошо, тогда я продолжаю сравнивать FLV. Теперь я вижу, что заголовки блоков NAL в FLV, закодированном ffmpeg, немного изменились, но я не могу понять, в чем смысл этих изменений. Я прочитал много спецификаций, но ничего полезного. Кто-нибудь может мне это прояснить?
Например, мои блоки NAL выглядят так: 00 00 00 01 XX XX ... - для всех блоков
NAL FFmpeg: 00 00 [14 BA] 61 9A ... - без IDR (двухбайтовая переменная) 00 00 [7A 02] 65 88 ... - IDR (двухбайтовая переменная) 00 00 00 40 06 05 ... - SEI
Добавлен какой-нибудь счетчик или еще что-нибудь?
Будем рады любым идеям, ссылкам и т. Д.