FLV (Flash Video) — это формат файла-контейнера с расширением .flv. FLV используется для доставки аудио/видео контента через Интернет с помощью Adobe Flash Player или Adobe Air. Данные в FLV-файлах кодируются так же, как и в SWF-файлах. Прямая поддержка была добавлена в Flash Player 7 в 2003 году. Системы Adobe создали F4V в 2007 году из-за ограничений FLV.
Файлы FLV содержат битовые видеопотоки Sorenson Spark, которые являются проприетарным вариантом видео стандарта H.263. Это обязательный формат сжатия для Flash Player 6 и 7. Flash Player версии 8 поддерживает битовые видеопотоки On2 TrueMotion VP6. Это рекомендуемый формат сжатия для Flash Player 8 и выше. FLV поддерживает звук в формате MP3, кодек Nellymoser Asao и кодек Speex с открытым исходным кодом. Он также поддерживает несжатый звук или звук в формате ADPCM. AAC (HE-AAC/AAC SBR, основной профиль AAC и AAC-LC) поддерживаются последними версиями Flash Player 9.
С точки зрения структура файлы FLV состоят из заголовка и пакетов. Файл FLV начинается с заголовка. Заголовок имеет следующие поля.
После заголовка идет Packets. Файл FLV разделен на несколько пакетов, называемых тегами FLV, которые имеют 15-байтовые заголовки. Пакеты содержат метаданные для аудио, видео, сценариев, информацию о шифровании и полезную нагрузку. Пакеты FLV имеют следующие поля.
Название | Тип | Подробности |
---|---|---|
Signature |
UI8 |
Значение байта всегда соответствует символу ‘F' (0x46) |
Signature |
UI8 |
Значение байта всегда соответствует символу 'L' (0x4C) |
Signature |
UI8 |
Значение байта всегда соответствует символу 'V' (0x56) |
Version |
UI8 |
Версия файла (например, 0x01 для FLV первой версии) |
TypeFlagsReserved |
UB [5] |
Значение должно соответствовать 0 |
TypeFlagsAudio |
UB [1] |
1 = Наличие AudioTags в файле |
TypeFlagsReserved |
UB [1] |
Значение должно соответствовать 0 |
TypeFlagsVideo |
UB [1] |
1 = Наличие VideoTags в файле |
DataOffset |
UI32 |
Длина заголовка в байтах |
Поле | Тип | Подробности |
---|---|---|
PreviousTagSize0 |
UI32 |
Всегда 0 |
Tag1 |
FLVTAG |
Первый тег |
PreviousTagSize1 |
UI32 |
Размер предыдущего тега, включая заголовок, в байтах. Для FLV версии 1, значение будет равно сумме 11 и размеру прошлого тега (DataSize). |
Tag2 |
FLVTAG |
Второй тег |
... |
... |
... |
PreviousTagSizeN-1 |
UI32 |
Размер предпоследнего тега, включая заголовок, в байтах. |
TagN |
FLVTAG |
Последний тег |
PreviousTagSizeN |
UI32 |
Размер последнего тега, включая его заголовок, в байтах |
Поле | Тип | Подробности |
---|---|---|
Reserved |
UB [2] |
Зарезервировано для FMS, должно соответствовать 0 |
Filter |
UB [1] |
Указывает, фильтруются ли пакеты. 0 = Предварительная обработка не требуется. 1 = Перед обработкой пакета требуется предварительная обработка (например, расшифровка). Должен быть равен 0 для незашифрованных файлов и 1 для зашифрованных тегов. См. Приложение F. Шифрование FLV для использования фильтров. |
TagType |
UB [5] |
Тип контента для тега. Доступны следующие значения: 8 = audio 9 = video 18 = script data |
DataSize |
UI24 |
Длина. Количество байтов после StreamID до конца тега (Равно длине тега – 11) |
Timestamp |
UI24 |
Время в миллисекундах, когда применяются данные в этом теге. Это значение относится к первому тегу в FLV-файле, который всегда имеет отметку времени 0. |
TimestampExtended |
UI8 |
Расширение поля Timestamp для формирования значения SI32. Это поле представляет старшие 8 бит, а предыдущее поле Timestamp представляет младшие 24 бита времени в миллисекундах |
StreamID |
UI24 |
Всегда 0. |
AudioTagHeader |
IF TagType == 8 AudioTagHeader |
|
VideoTagHeader |
IF TagType == 9 VideoTagHeader |
|
EncryptionHeader |
IF Filter == 1 EncryptionTagHeader |
|
FilterParams |
IF Filter == 1 FilterParams |
|
Data |
IF TagType == 8 AUDIODATA IF TagType == 9 VIDEODATA IF TagType == 18 SCRIPTDATA |
Данные специфичны для каждого типа носителя. |
Звуковые теги аналогичны тегу DefineSound в формате SWF-файла. Для форматов, также поддерживаемых в SWF, данные полезной нагрузки идентичны в FLV и SWF.
AudioTagHeader содержит метаданные, относящиеся к аудио.
Поле | Тип | Подробности |
---|---|---|
SoundFormat |
UB [4] |
Формат звуковых данных. Определены следующие значения: 0 = линейный PCM, порядок байтов платформы 1 = ADPCM 2 = MP3 3 = линейный PCM, прямой порядок байтов 4 = Nellymoser 16 кГц моно 5 = Nellymoser 8 кГц моно 6 = Nellymoser 7 = G.711 A- логарифмический PCM 8 = логарифмический PCM мю-типа G.711 9 = зарезервировано 10 = AAC 11 = Speex 14 = MP3 8 кГц 15 = звук, зависящий от устройства Форматы 7, 8, 14 и 15 зарезервированы. AAC поддерживается в Flash Player 9,0,115,0 и выше. Speex поддерживается в Flash Player 10 и выше. |
SoundRate |
UB [2] |
Частота дискретизации. Значения: 0 = 5.5 kHz, 1 = 11 kHz, 2 = 22 kHz, 3 = 44 kHz |
SoundSize |
UB [1] |
Размер каждого аудио образца. Этот параметр относится только к несжатым форматам. Сжатые форматы всегда внутренне декодируются до 16 бит. 0 = 8-битные выборки 1 = 16-битные выборки |
SoundType |
UB [1] |
Количество каналов 0 = Моно 1 = Стерео |
AACPacketType |
IF SoundFormat == 10 UI8 |
Определены следующие значения: 0 = заголовок последовательности AAC 1 = необработанный AAC |
Затем за AudioTagHeader следуют данные AUDIODATA, то есть полезные аудиоданные, но есть особый случай, если аудиоформат (SoundFormat) равен AAC = 10, AudioTagHeader будет больше байта данных AACPacketType, это поле представлено типом AACAUDIODATA :0 = заголовок последовательности AAC, 1 = необработанный AAC.
Сегмент AUDIODATA содержит полезную нагрузку аудио.
Поле | Тип | Подробности |
---|---|---|
IF EncryptedBody |
EncryptedBody |
Подробности см. в Приложении F. Шифрование FLV. Аудиотеги зашифрованы, как указано в разделе F.3.3 |
ELSE Body |
AudioTagBody |
AudioTagBody содержит полезную нагрузку аудио.
Поле | Тип | Подробности |
---|---|---|
SoundData |
IF SoundFormat == 10 AACAUDIODATA ELSE Зависит от формата |
Формат AAC поддерживается во Flash Player 9,0,115,0 и выше.
Поле | Тип | Подробности |
---|---|---|
Data |
IF AACPaketType == 0 AudioSpecificConfig ELSE IF AACPacketType == 1 Raw AAC frame in UI8 [] |
Аудиоспецифическая конфигурация определена в стандарте ISO 14496-3. Обратите внимание, что это не то же самое, что содержимое поля esds из файла MP4/F4V |
Теги видео аналогичны тегу видеокадра в формате SWF-файла, и их данные полезной нагрузки идентичны. Смотрите также Спецификацию формата файла SWF по адресу [4].
VideoTagHeader содержит метаданные, относящиеся к видео.
Поле | Тип | Подробности |
---|---|---|
Frame Type |
UB [4] |
Тип видеокадра. Определены следующие значения: 1 = ключевой кадр (для AVC — кадр с возможностью поиска) 2 = промежуточный кадр (для AVC — кадр без поиска) 3 = одноразовый промежуточный кадр (только для H.263) 4 = сгенерированный ключевой кадр (зарезервировано только для использования сервером) 5 = кадр видеоинформации/команды |
CodecID |
UB [4] |
Идентификатор кодека. Определены следующие значения: 2 = Sorenson H.263 3 = Видео экрана 4 = On2 VP6 5 = On2 VP6 с альфа-каналом 6 = Версия видео экрана 2 7 = AVC |
AVCPacketType |
IF CodecID == 7 UI8 |
Определены следующие значения: 0 = заголовок последовательности AVC 1 = NALU AVC 2 = конец последовательности AVC (конец последовательности NALU более низкого уровня не требуется или не поддерживается) |
CompositionTime |
IF CodecID == 7 SI24 |
IF AVCPacketType == 1 Смещение времени компоновки ELSE 0 См. ISO 14496-12, 8.15.3 для объяснения времени компоновки. Смещение в файле FLV всегда указывается в миллисекундах. |
За VideoTagHeader следуют данные VIDEODATA, представляющие собой полезную нагрузку видео. Конечно, как и в случае с аудио AAC, здесь также есть особый случай: если формат видео — AVC (H.264), VideoTagHeader будет иметь 4 байта информации.
Сегмент VIDEODATA содержит метаданные видео, дополнительные метаданные шифрования и полезную нагрузку видео.
Поле | Тип | Подробности |
---|---|---|
IF EncryptedBody |
EncryptedBody |
Подробности см. в Приложении F. Шифрование FLV. Видеотеги зашифрованы, как указано в разделе F.3.3 |
ELSE Body |
VideoTagBody |
VideoTagBody содержит полезную нагрузку видеокадра.
Поле | Тип | Подробности |
---|---|---|
VideoTagBody |
IF FrameType == 5 UI8 ELSE ( IF CodecID == 2 H263VIDEOPACKET IF CodecID == 3 SCREENVIDEOPACKET IF CodecID == 4 VP6FLVVIDEOPACKET IF CodecID == 5 VP6FLVALPHAVIDEOPACKET IF CodecID == 6 SCREENV2VIDEOPACKET IF CodecID == 7 AVCVIDEOPACKET ) |
Полезная нагрузка видеокадра или информация о кадре Если FrameType == 5, то вместо полезной нагрузки видео тело видеоданных содержит UI8 со следующим значением: 0 = Начало последовательности видеокадров поиска на стороне клиента 1 = Конец последовательности видеокадров поиска на стороне клиента Для всех видеопакетов, кроме AVC, смотрите SWF-файл Спецификация формата для получения подробной информации |
AVCVIDEOPACKET содержит полезную нагрузку видеоданных AVC.
Поле | Тип | Подробности |
---|---|---|
Data |
IF AVCPacketType == 0 AVCDecoderConfigurationRecord IF AVCPacketType == 1 Один или более NALUs (Требуются полные кадры) |
Сегмент SCRIPTDATA содержит необязательное поле encryption metadata, и script payload.
Поле | Тип | Подробности |
---|---|---|
IF EncryptedBody |
EncryptedBody |
Подробности см. в Приложении F. Шифрование FLV. ScriptTagBody зашифрованн, как указано в разделе F.3.3 |
ELSE Body |
AudioTagBody |
Тело тега Script содержит SCRIPTDATA, закодированные в формате Action Message Format (AMF), который представляет собой компактный двоичный формат, используемый для сериализации графов объектов ActionScript. Спецификация для AMF0 доступна по адресу [5].
Поле | Тип | Подробности |
---|---|---|
Name |
SCRIPTDATAVALUE |
Метод или название объекта. SCRIPTDATAVALUE.Type = 2 (String) |
Value |
SCRIPTDATAVALUE |
AMF аргументы или свойства объекта. SCRIPTDATAVALUE.Type = 8 (ECMA array) |
SCRIPTDATAVALUE запись содержит типизированное ActionScript значение.
Поле | Тип | Подробности |
---|---|---|
Type |
UI8 |
Тип ScriptDataValue. Определены следующие типы: 0 = Число 1 = Логическое значение 2 = Строка 3 = Объект 4 = MovieClip (зарезервировано, не поддерживается) 5 = Пусто 6 = Не определено 7 = Ссылка 8 = Массив ECMA 9 = Маркер конца объекта 10 = Строгий массив 11 = Дата 12 = Длинная строка |
ScriptDataValue |
IF Type == 0 DOUBLE IF Type == 1 UI8 IF Type == 2 SCRIPTDATASTRING IF Type == 3 SCRIPTDATAOBJECT IF Type == 7 UI16 IF Type == 8 SCRIPTDATAECMAARRAY IF Type == 10 SCRIPTDATASTRICTARRAY IF Type == 11 SCRIPTDATADATE IF Type == 12 SCRIPTDATALONGSTRING |
Значение данных скрипта. Логическое значение равно (ScriptDataValue ≠ 0). |
Объект метаданных FLV должен содержаться в теге SCRIPTDATA с именем onMetaData. Различные свойства доступны для запущенной программы ActionScript через свойство NetStream.onMetaData. Доступные свойства различаются в зависимости от программного обеспечения, создающего FLV-файл. Типичные свойства включают:
Поле | Тип | Подробности |
---|---|---|
audiocodecid |
Number |
Идентификатор аудиокодека, используемый в файле (доступные значения SoundFormat см. в E.4.2.1) |
audiodatarate |
Number |
Битрейт аудио в килобитах в секунду |
audiodelay |
Number |
Задержка, вносимая аудиокодеком в секундах |
audiosamplerate |
Number |
Частота воспроизведения аудиопотока |
audiosamplesize |
Number |
Разрешение одного звукового образца |
canSeekToEnd |
Boolean |
Обозначение последнего видеокадра как ключевого кадра |
creationdate |
String |
Дата и время создания |
duration |
Number |
Общая продолжительность файла в секундах |
filesize |
Number |
Общий размер файла в байтах |
framerate |
Number |
Количество кадров в секунду |
height |
Number |
Высота видео в пикселях |
stereo |
Boolean |
Индикация стереозвука |
videocodecid |
Number |
Идентификатор видеокодека, используемый в файле (доступные значения CodecID см. в E.4.3.1) |
videodatarate |
Number |
Битрейт видео в килобитах в секунду |
width |
Number |
Ширина видео в пикселях |
Правообладатель: Adobe Inc.
Используемые расширения файлов: .flv
MIME type: video/x-flv, video/mp4, audio/mp4
Выпущен: 10.09.2003
Последняя версия: 10.1.2.01 (август 2010)
Хранимая информация: аудио, видео, текст
Звук с переменным битрейтом: Есть
Переменная частота кадров: Есть
Аппаратные плееры: Есть
Потоковое мультимедиа: C RTMP
Метаданные: Есть
Главы: Есть
Вложения: Нет
Интерактивные меню: Нет
3D-визуализация: Нет
Поддерживаемые форматы сжатия видео
Поддерживаемые форматы сжатия аудио