Що таке файл FLV?
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. Версія 8 Flash Player підтримує бітові потоки відео On2 TrueMotion VP6. Це рекомендований формат стиснення для Flash Player 8 і вище. FLV підтримує аудіо у форматі MP3, кодек Nellymoser Asao та кодек Speex з відкритим кодом. Він також підтримує аудіо без стиснення або аудіо у форматі ADPCM. AAC (HE-AAC/AAC SBR, AAC Main Profile і AAC-LC) підтримуються останніми версіями Flash Player 9.
Структура
Файли FLV складаються із заголовків і пакетів. Файл FLV починається із заголовка. У заголовку є такі поля.
- Підпис: його значення FLV
- Версія: його значення за замовчуванням – 1. Припустимий лише 0x01.
- Прапорці: 0x04 використовується для аудіо, а 0x01 використовується для відео, тому 0x05 використовується як для аудіо, так і для відео.
- Розмір заголовка: значення за умовчанням — 9. Використовується для пропуску нового розгорнутого заголовка.
Після заголовка йдуть пакети. Файл FLV розбивається на кілька пакетів, які називаються тегами FLV і мають 15-байтові заголовки. Пакети містять метадані для аудіо, відео, сценаріїв, інформацію про шифрування та корисне навантаження. Пакети FLV мають такі поля.
- Зарезервовано: зарезервовано для FMS і має бути 0.
- Фільтр: вказує, фільтруються пакети чи ні.
- 0: No preprocessing required. This is used for unencrypted files.
- 1: Preprocessing required. This is used for encrypted files
- Тип пакета: визначає тип вмісту в пакеті.
- 8: Audio
- 9: Video
- 18: Script Data
- Розмір даних: позначає довжину повідомлення.
- Timestamp Lower: зберігає позначку часу в мілісекундах, коли застосовуються дані тегу. Для першого пакета встановлено значення NULL.
- Timestamp Upper: розширення для створення значення uint32_be.
- Ідентифікатор потоку: для першого потоку встановлено значення NULL.
- Дані корисного навантаження: це дані на основі типу пакета.