美文网首页
flv文件格式图解

flv文件格式图解

作者: hijiang | 来源:发表于2019-06-24 18:10 被阅读0次

flv格式是由adobe公司制定的一种比较简单的流媒体存储格式,由于其视频文件体积轻巧、封装播放简单等特点,使其很适合在网络上进行应用,目前主流的视频网站无一例外地使用了FLV格式。另外由于当前浏览器与Flash Player紧密的结合,使得网页播放FLV视频轻而易举,也是FLV流行的原因之一。
而且现在几乎所有的直播平台,都采用rtmp协议进行音视频数据的传输,而rtmp中的消息体,就是flv tag中的tag data,即rtmp消息使用flv的tag data格式来封装其消息内容,所以了解它的格式非常有必要。

从整个文件上来看,FLV是由The FLV header 和 The FLV File Body 组成.
其格式大体如下图:


flv格式

它由一个头部和若干个tag组成,这些tag类型包括:script data,video data,audio data;script data即metadata


flv header:9字节

格式(注意图中TypeFlagsVideo对于的是第0位):
[图片上传失败...(image-ae674d-1561371025375)]
格式(go语言实现):

type SrsFlvHeader struct {
    signature   []byte  //3byte,FLV
    version     byte
    flags       byte      //第0位和第2位,分别表示 audio 与 video 存在的情况.(1表示存在,0表示不存在)。
    headerSize  []byte //即自身的总长度,一直为9, 4字节(注:flv使用的是大端格式)
}

flv body:

[图片上传失败...(image-efdb20-1561371025375)]

PreviousTagSize:前一个tag的大小(tag header+tag data)

至于这里为什么放后面,先不管了,可能是为了拖动定位方便吧

flv的body就是由一个一个tag组成的,每个tag由tag header及tag data组成:
[图片上传失败...(image-dd3c8b-1561371025375)]

tag header格式(注意这里是大端格式):

type TagHeader struct {
    tagType     byte
    dataSize    []byte //3byte
    timestamp   []byte  //4byte
    reserved    []byte  //全0
}

script tag data格式:
见图:


script tag data

具体的内部内容,是一个amf0的data,包含一个amf0 string及amf0 object;
amf0 string一般为onMetaData;
amf0 object包含宽,高,码率,编码器,音频码率,采样率等等信息。


video tag data格式:


tag data第一字节

从图中可以看出,第一字节的高4位表示帧类型(关键帧,p帧等),低4位表示编解码器信息:


tag data第一字节

第一字节的低4位表示编码器信息,一般我们都是7(AVC/H264)
接下来,第二字节表示AVCPacketType:

类型 说明
AVCPacketType=0x00 AVCSequence Header
AVCPacketType=0x01 为AVC NALU
AVCPacketType=0x02 为AVC end ofsequence

见图:


AVCPacketType为0,表示sps pps信息 AVCPacketType为1,NALU

第三字节,CompositionTime为相对时间戳:
如果AVCPacketType=0x01, 为相对时间戳;
其它,均为0;


audio tag格式:
第一字节:
soundFormat(4bit)|soundRate(2bit)|soundSize(1bit)|soundType(1bit)

  • SoundFormat: (4 bits)
    1 = ADPCM
    2 = MP3
    3 = Linear PCM, little endian
    4 = Nellymoser 16 - kHz mono
    5 = Nellymoser 8 - kHz mono
    6 = Nellymoser
    7 = G.711 A - law logarithmic PCM
    8 = G.711 mu - law logarithmic PCM
    9 = reserved
    10 = AAC
    11 = Speex
    14 = MP3 8 - Khz
    15 = Device - specific sound
  • SoundRate: (2 bits)
    0 = 5.5-kHz
    1 = 11 - kHz
    2 = 22 - kHz
    3 = 44 - kHz
  • SoundSize: (1 bit)
    0 = snd8Bit
    1 = snd16Bit
  • SoundType: (1 bit)
    0 = sndMono
    1 = sndStereo
    如图:


    audio tag第一字节

第二字节:
AACPacketType,这个字段来表示AACAUDIODATA的类型:0 = AAC sequence header,1 = AAC raw


aac sequence header

data这里就不贴了。
以上就是flv格式的一个分析。

相关文章

  • flv文件格式图解

    flv格式是由adobe公司制定的一种比较简单的流媒体存储格式,由于其视频文件体积轻巧、封装播放简单等特点,使其很...

  • ffmpeg直播推拉流

    推流 -re减慢帧率速率-c 音视频编码方式-f flv 已flv文件格式 拉流

  • FLV 文件格式

    概述 Flash Video(简称FLV),是一种网络视频格式,用作流媒体格式,它的出现有效地解决了视频文件导入F...

  • FLV格式解析

    1.FLV文件格式如下,由flv头和一系列tag组成,tag又分为script tag、音频tag、视频tag。 ...

  • iOS RTMP 视频直播开发笔记(6)- 封包 FLV

    讲讲FLV文件格式。以及数据如何放置的。 FLV里面是由多个Tag构成的:[[tag1][tag2][tag3][...

  • FLV 和 HTTP-FLV

    FLV 简介 FLV(Flash Video)是 Adobe 公司推出的一种媒体文件格式,是一种非常常见的音视频封...

  • Flv文件格式解析

    Flv文件解析 Flv文件分为header和body两个部分 Header Body TAG TAG_DATA S...

  • flv文件格式介绍

    目录 概述 flv文件主体结构 Tag介绍 开源的解析软件 参考阅读 1. 概述 flv(Flash Video)...

  • FFmpeg 是如何实现多态的?

    前言 众所周知,FFmpeg 在解码的时候,无论输入文件是 MP4 文件还是 FLV 文件,或者其它文件格式,都能...

  • mkv、rmvb、avi、MP4、flv、wmv、HLS特点和区

    mkv,rmvb,avi,mp4, flv ,wmv都是封装格式,也是文件格式,并不是数据压缩格式。 先介绍一下这...

网友评论

      本文标题:flv文件格式图解

      本文链接:https://www.haomeiwen.com/subject/yuioqctx.html