当前位置: 首页 > article >正文

音视频入门基础:FLV专题(3)——FLV header简介

一、引言

本文对FLV格式的FLV header进行简介,FLV文件的开头就是FLV header。

进行简介之前,请各位先从《音视频入门基础:FLV专题(1)——FLV官方文档下载》下载FLV的官方文档《video_file_format_spec_v10_1.pdf》和SWF的官方文档《swf-file-format-spec.pdf》。

《video_file_format_spec_v10_1.pdf》总共有89页,《swf-file-format-spec.pdf》总共有243页。本文下面所说的“页数”是指在pdf阅读器中显示的页数:

二、FLV的Simple data types

根据《video_file_format_spec_v10_1.pdf》第74页,FLV的Simple data types(简单数据类型)定义在SWF的官方文档中。Simple data types描述了FLV格式中的每个属性占用多少空间:

所以我们得翻阅SWF的官方文档《swf-file-format-spec.pdf》,该文档第15页到第20页描述了Simple data types(简单数据类型)。

第15页:

第18页:

其中:

SI8:有符号8位整数值。

SI16:有符号16位整数值。

SI32:32位带符号整数值。

SI8[n]:带符号的8位数组。n是数组元素的个数。

SI16[n]:带符号的16位数组。n是数组元素的个数。

UI8:无符号8位整数值。

UI16:无符号16位整数值。

UI32:无符号32位整数值。

UI8[n]:无符号的8位数组。n是数组元素的个数。

UI16[n]:无符号的16位数组。n是数组元素的个数。

UI24[n]:无符号的24位数组。n是数组元素的个数。

UI32[n]:无符号的32位数组。n是数组元素的个数。

UI64[n]:无符号的64位数组。n是数组元素的个数。

SB[nBits]:有符号的位值(nBits是用来存储值的位数)。
UB[nBits]:无符号的位值(nBits是用来存储值的位数)。

FB[nBits]:带符号的定点位值(nBits是用于存储值的位数)。

三、FLV header

根据《video_file_format_spec_v10_1.pdf》第74页,一个FLV文件应以FLV header为开始。可以看出来FLV header中的属性加起来总共占9个字节(Signature占3个字节,Version占1个字节,TypeFlagsReserved+TypeFlagsAudio+TypeFlagsReserved+TypeFlagsVideo占1个字节,DataOffset占4个字节,加起来总共9字节),所以FLV header为9字节:

Signature:FLV header的前3个字节为Signature,为文件格式标识。对于FLV格式,固定为“FLV”(0x46 0x4C 0x56)。

Version:FLV header的第4个字节为Version,为格式版本。对于FLV格式,值必须为1。

FLV header的第5个字节比较特殊:

第5个字节的前5位(8位等于1个字节)是保留位(TypeFlagsReserved),值必须是0。

第6位为音频类型标志(TypeFlagsAudio),值为1表示FLV文件中含有音频,值为0表示不含音频。

第7位也是保留位,值必须是0。
第8位为视频类型标志(TypeFlagsVideo),值为1表示FLV文件中含有视频,值为0表示不含视频。

所以如果FLV header第5个字节的值为0x04(二进制的0b00000100)表示该FLV文件中仅含有音频不含视频;第5个字节的值为0x01(二进制的0b00000001)表示该FLV文件中仅含有视频不含音频;第5个字节的值为0x05(二进制的0b00000101)表示该FLV文件中既含视频也含音频。

DataOffset:FLV header的第6到第9个字节为DataOffset。为整个FLV header的长度,单位为字节。值固定为9。

四、FLV File Body

根据《video_file_format_spec_v10_1.pdf》第74页至75页,在FLV header之后,FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 = FLV header + PreviousTagSize0 + Tag1 + PreviousTagSize1 + Tag2 + ...+... + PreviousTagSizeN-1 + TagN + PreviousTagSizeN: 

PreviousTagSize0:FLV header之后紧接着的就是PreviousTagSize0,占4个字节,值必须为0。

五、FLV header实例分析

用notepad++打开《音视频入门基础:FLV专题(2)——使用FFmpeg命令生成flv文件》中生成的FLV文件,文件的开头(下图红框中的)就是FLV header。可以看到header为:0x46 0x4C 0x56 0x01 0x05 0x00 0x00 0x00 0x09。由于该FLV header的第5个字节的值为0x05,所以能推测出来该FLV文件中既含视频也含音频:

FLV header之后紧接着的就是PreviousTagSize0,值必须为0:


http://www.kler.cn/a/321140.html

相关文章:

  • 恒流数显驱动数显LED驱动芯片VK16D32
  • 【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?
  • Python调用API翻译Excel中的英语句子并回填数据
  • 报错 No available slot found for the embedding model
  • [白月黑羽]关于仿写类postman功能软件题目的解答
  • 【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)
  • 【算法精解】逆序对受限的方案数
  • NLP-transformer学习:(7)evaluate实践
  • ??实验——完全使用Ansible部署多台服务器的服务
  • MedPrompt:基于提示工程的医学诊断准确率优化方法
  • GS-SLAM论文阅读笔记--GEVO
  • nodejs基于vue+express度假村旅游管理系统设计与实现7t82p
  • 【C++ 学习】多态的基础和原理(10)
  • Unity3D 中构建行为树插件详解
  • AI论文写作网站哪个最好用?亲测完推荐这款!
  • 【数据库】
  • 学习篇 | 5步安装 npm node(homebrew 简洁版)
  • Interaction to Next Paint 指标
  • STL之vector篇(下)(手撕底层代码,从零实现vector的常用指令,深度剖析并优化其核心代码)
  • 第18周 3-过滤器
  • 如何进行SQL调优?
  • 黑龙江亿林自研等保一体机深度解析
  • Vue Devtools -----一条龙安装教程 + 解决安装使用过程的一些问题
  • EdgeRoute_镜像烧录
  • 通过 Java Vector API 利用 SIMD 的强大功能
  • 2024-2025华为ICT大赛报名|赛前辅导|学习资料