Ковыряю h264 bitstream, в частности разделитель (start code) границы NAL unit. Никогда не копался в этих битах и байтах, но нужно доковырять кодировщик
Везде пишут (например ), что разделитель, стартовый код (start code), от которого начинается последовательность NAL блоков(units?) это
1 байт - 00000000
2 байт - 00000000
3 байт - 00000000
4 байт - 00000001
Ну или 3 байта бывает, но последний 00000001 должен.
Смотрю потом hex редактором сохраненный поток h264 (в FLV формате)
0000 00 00 00 0E 67 42 C0 29 8C 8D 40 5E 1A 90 0F 08
0010 84 6A 00 00 00 04 68 CE 3C 80 00 00 36 E1 65 B8
0020 00 03 00 00 03 01 0F FF F8 70 B4 50 00 21 7E F8
0030 E0 0C 73 08 7A FF FE 4E 10 CE BF FF F7 08 65 51
и вижу что верно, первые 3 байта - нулевые, а четвертый вовсе не 1 (как предпологалось), а некое другое число (x0E), который указывает длинну NAL unit"a (это я понял эксперементально и вроде это так, если отсчитать от него 14 байтов, то мы перейдем к следующему NAL - PPS), дальше, после x0E уже идет заголовок NAL (x67 - 01100111 - его заголовок, который указывает что NAL ref -3 (биты 11) и NAL type - 7 (SPS) (биты 00111)), дальше идет другой NAL блок - PPS (начитается от x68, 01101000 - тут 11 - 3 (NAL ref) и 01000 - 8 (код PPS)). Три байта нули...
Дальше идет сам IDR (x65 - 01100101 - 00101 - 5 (IDR nal)), тут уже разделитель 2 нулевых байта...
Не понятно с разделителями и не понятно где укзано про длинну.
Также заметил, что мой кодировщик(MediaCodec android) правильно ставит стартовые коды, а именно
00000000
00000000
00000000
00000001
но потом в коде эти коды вырезаются и вместо них устанавливаюся новые, тоже 4 байта
0
0
0
последний байт это длинна NAL блока
Тут тогда понятно, откуда берутся такие разделители. Но не понятно почему ставят длинну, а не просто 00000001 в конце
Может кто знает про разделители?