• FLV文件简介


    1.简介

    FLV是Adobe发布的一种可以作为直播也可以作为点播的封装格式,格式非常简单,均以FLVTAG的形式存在,并且每一个TAG都是独立存在的。

    2.FLV格式标准介绍

    2.1FLV文件头

    字段占用位数说明
    签名字段8字符 "F" (0x46)
    签名字段8字符 "L" (0x4C)
    签名字段8字符 "V" (0x56)
    版本8文件版本
    保留标记类型5固定为0
    音频标记类型11为显示音频标签
    保留标记类型1固定为0
    视频标记类型11为显示视频标签
    数据偏移32这个头的字节

    以下是我打开一个FLV文件,查看16进制数据。

     从上图中分析可知:

    • 3字节的标签:“F”、“L”、“V”
    • 1字节的FLV文件版本:0x01
    • 5位保留位:00000b
    • 1位音频标记位:1b
    • 1位保留位:0b
    • 1位视频标记位:1b
    • 4字节的文件头数据偏移:0x00 00 00 09

    2.2FLV文件内容格式

    FLV文件内容如下所示:

    字段类型大小说明
    上一个TAG的大小4字节一直是0
    TAG1FLVTAG第一个TAG
    上一个TAG的大小4字节上一个TAG字节大小,包括TAG的Header+Body,TAG的Header大小为11字节,所以为11字节+TAG Body的大小
    TAG2FLVTAG第二个TAG
    上一个TAG的大小4字节.........
    .........4字节.........

    表中可以看见FLV文件内容格式主要是FLVTAG,FLVTAG分为两部分TAGHeader+TAGBody。

    如下图所示,我展示了一个音频的TAG,可以看见header为11字节 body 为4字节,紧接着跟了一个4字节大小的 “上一个TAG的大小”,数值为15。

    下表为FLVTAG的格式解析:

    字段类型大小说明
    保留2位为FMS保留,为0
    滤镜1位

    主要用来做文件内容加密处理

    0:不预处理

    1:预处理

    TAG类型5位

    0x08:音频TAG

    0x09:视频TAG

    0x12:脚本数据

    数据大小24位TAG的DATA部分的大小
    时间戳24位以毫秒为单位的展示时间
    扩展时间戳8位针对时间戳增加的补充时间戳
    流ID24位为0
    TAG的Data音视频媒体数据

    说明:

    时间戳的大小占用3个字节,最大表示0xFFFFFF(16777215)毫秒,转换为秒 16777秒,大约等于4.66小时,如果使用FLV的格式,采用的这个时间戳最大可存储至4.66小时。

    扩展时间戳大小占1个字节,最大为0xFF(255),扩展时间戳使得FLV原有的时间戳得到了扩展,不仅仅局限于4.66小时,还可以存储得更久,大概可以存储1193个小时,大约50天。

    2.3VideoTag数据解析

    数据格式如下表所示:

    字段类型大小说明
    帧类型4位

    1:关键帧

    2:P或B帧

    3:仅应用于H.263

    4:生成关键帧(服务器使用)

    5:视频信息/命令帧

    编码标识

    4位

    2:Sorenson H.263

    3:Screen Video

    4:On2 VP6

    5:带Alpha通道的On2 VP6

    6:Screen Video2

    7:H.264

    H.264的包类型当编码标识为H.264时占用1个字节

    0:H.264的Sequence Header

    1:NALU

    2:H.264的Sequence end

    CTS当编码标识为H.264时占用3个字节当编码使用B帧时,DTS和PTS不相等。CTS用于表示PTS和DTS之间的差值
    视频数据视频数据压缩过的视频数据

    详解如下图所示:观察右边的结构  tag data()

     

    2.4AudioTag数据解析

    数据格式如下表所示:

    字段类型大小说明
    声音格式4位

    具体我就不全列出来了:列几个常用的

    2:MP3

    10:AAC

    11:Speex

    音频采样率

    2位

    0:5.5kHz

    1:11kHz

    2:22kHz

    3:44kHz

    采样大小1位

    0:8位

    1:16位

    音频类型1位

    0:Mono sound

    1:Stereo sound

    音频包类型当音频为AAC时占用这个字节,1个字节

    0:AAC Sequence Header

    1:AAC raw数据

    音频数据具体编码的音频数据

    详解如下图所示:观察右边的结构  tag data()

     2.5ScriptData数据解析

    ScriptData常见的展示方式是FLV的MetaData,里面存储的数据格式一般为AMF数据,下表为ScriptData存储格式。

    字段类型大小说明
    类型8位

    不同的值代表着AMF格式不同的类型

    0:Number

    1:Boolean

    2:String

    3:Object

    5:Null

    6:Undefined

    7:Reference

    8:ECMA Array

    9:Object end marker

    10:Strict Array

    11:Data

    12:Long String

    数据

    3.FLV查看工具

    FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析-C++文档类资源-CSDN下载

  • 相关阅读:
    noip2011铺地毯
    Java 8 Stream API可以怎么玩?
    MVC设计思想理解和ASP.NET MVC理解
    10 Minimax估计和Bayes估计
    猿创征文 |【gin-vue-admin】后端结构设计和基本工作原理
    基于python和定向爬虫的商品比价系统
    前端八股文
    Redis分布式锁及缓存的简单实现
    Pytorch 基于NiN的服饰识别(使用Fashion-MNIST数据集)
    post请求同时上传文件并传递其他参数的前后端写法
  • 原文地址:https://blog.csdn.net/wzz953200463/article/details/126022020