Я делаю анализатор потока h264 и обнаружил странное поведение ffmpeg при записи и чтении одного и того же кадра, упакованного с помощью MPEG-TS.
Я сбросил данные кадра кодирования и декодирования в HEX и обнаружил следующие различия:
В начале кадра добавлен разделитель NAL:
+ 00
+ 00
+ 00
+ 01
+ 09
+ f0
это выглядит абсолютно законным для меня.
Но вот странные вещи:
Если текущий пакет не является последним, то добавляется некоторый суффикс (т.е. в последнем записанном кадре этого суффикса нет). И этот суффикс добавляется к текущему кадру чтения (т.е. это не префикс к следующему кадру).
+ e0
+ 00
+ 00
+ 00
+ 01
+ ce
+ 8c
+ 4d
+ 9d
+ 10
+ 8e
+ 25
+ e9
+ fe
(точно начиная с добавленного e0
байта)
Я пытаюсь понять, что это может означать. Если 00000001
является заголовком NAL, то за ним следует ce
байт с запрещенным нулевым битом, равным 1, что абсолютно не работает.
Я использую форк из репозитория ffmpeg github, последний раз объединенный с коммитом 89092fafdde894c6ba4d4f8e3cd1cce0d68bfc22
.
ffmpeg построен с --disable-everything --enable-encoder=libopenh264 --enable-muxer=mpegts --enable-demuxer=mpegts --enable-protocol=file --enable-parser=h264 --enable-decoder=libopenh264 --enable-shared --disable-static --disable-programs --disable-doc --enable-libopenh264
параметрами
00 00 00 01 ce
отсутствует в файле, который вы разместили. - person szatmary   schedule 10.12.2016