Маркер onMetaData в файле FLV - PullRequest
       3

Маркер onMetaData в файле FLV

2 голосов
/ 22 декабря 2009

Я хочу знать, как выглядит маркер onMetaData в FLV-файлах. Когда я открываю файлы FLV в виде простого текста, я получаю это:

FLV[][][][][](TAB)[][][][][][][]8[][][][][][][][][]  
onMetaData[]  
duration...   

Документы говорят, что первые 3 байта являются подписью "FLV", следующий байт сообщает версию flv, следующий байт сообщает нам, если присутствуют теги аудио или видео, следующие 4 байта являются смещением данных (размер заголовка), который равен 9, в ascii это код TAB. после того, как TAB запускает тело с первого «поля размера предыдущего тега», которое равно 0 (4 байта), далее идет тип тега (1 байт), размер данных (3 байта) и метка времени (4 байта), идентификатор потока (всегда 0, 3 байта). После этого остается:

[]  
onMetaData[]  
[][][][][][]  
duration...

Полагаю, маркер onMetaData равен «1 байт, новая строка (onMetaData» (1 байт, новая строка)), но каковы 7 байтов между маркером onMetaData и duration?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2010

Вам нужно будет просмотреть этот файл в шестнадцатеричном редакторе, чтобы получить от него что-нибудь полезное; текстовый редактор просто покажет непечатаемые символы.

Бит ASCII «onMetaData» в файле является заголовком тега, который оборачивает поле «длительности». Три байта сразу после «onMetaData» - это BodyLength тега (uint24, big-endian), а следующие 4 байта («\ x00 \ x00 \ x00 \ x08») описывают длину имени для следующего тега, что такое «продолжительность».

1 голос
/ 05 января 2016

Я предлагаю вам использовать инструмент hexedit http://www.hexedit.com/ это позволит вам увидеть всю информацию в строковом формате. а также имеет очень хорошую навигацию для анализа байтов.

В дополнение к этому, используйте https://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf для получения подробной информации обо всех байтах в файле FLV

0 голосов
/ 08 ноября 2011

Помните, что метаданные кодируются с использованием AMF.Это означает, что после строки «onMetaData» у вас есть 0x08 для обозначения начала массива, а затем 2 байта для обозначения длины первого элемента в виде числа символов / байтов

...