`
weiyuhu
  • 浏览: 237636 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

FLV文件格式分析(图示讲解的清楚)

阅读更多
FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。

FLV Header

一般比较简单,包括文件类型之类的全局信息,如图:

文件类型 3bytes 总是FLV(0x46 0x4C 0x56),否则...
版本 1byte 一般是0x01,表示FLV version 1
流信息 1byte 倒数第一bit是1表示有视频,倒数第三bit是1表示有音频,其他都应该是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也没发现有什么不对)
header长度 4bytes 整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了


FLV Body

FLV body就是由很多tag组成的。

FLV文件里面帧的实体就是tag了。每个tag都可以分为两部分,第一部分包含是tag 类型信息,长度固定为15字节,如图:

第二部分为tag data,也就是flv的数据(有音频,视频,脚本等三类数据),根据不同的tag类型就有不同的数据区,数据区的长度由第一部分的数据区长度字段定义,如图:

previoustagsize 4bytes 前一个tag的长度,第一个tag就是0
tag类型 1byte

三类:

    * 8 -- 音频tag
    * 9 -- 视频tag
    * 18 -- 脚本tag

数据区长度 3bytes
时间戳 3bytes 单位毫秒,如果是脚本tag就是0
扩展时间戳 1byte 作为时间戳的高位
streamsID 3bytes 总是0(不知道干啥用)
数据区

接下来就是下一个tag的内容,其开始的四个字节定义了上个tag的总长度,注意上个tag的总长度中不包括上个tag之前的4个描述再上一个tag的长度的4个字节,如图:

接下来说一下文件尾,在文件尾的最后有四个字节是定义最后一个tag的长度的,如图:

这里我门可以算一下,是00 00 00 DD是221,最后一个tag的长度是221,如图:

下面是不同类型的tag数据区的内容体

Audio tag 数据区

audio信息 1byte

前四位bits表示音频格式:

    * 0 -- 未压缩
    * 1 -- ADPCM
    * 2 -- MP3
    * 5 -- Nellymoser 8kHz momo
    * 6 -- Nellymoser

下面两位bits表示samplerate:

    * 0 -- 5.5kHz
    * 1 -- 11kHz
    * 2 -- 22kHz
    * 3 -- 44kHz

下面一位bit表示每个采样的长度:

    * 0 -- snd8Bit
    * 1 -- snd16Bit

下面一位bit表示类型:

    * 0 -- sndMomo
    * 1 -- sndStereo

audio数据区 不定

video tag 数据区

video信息 1byte

前四位bits表示类型:

    * 1 -- keyframe
    * 2 -- inner frame
    * 3 -- disposable inner frame (H.263 only)

后四位bits表示编码器id:

    * 2 -- Seronson H.263
    * 3 -- Screen video
    * 4 -- On2 VP6
    * 5 -- On2 VP6 without channel
    * 6 -- Screen video version 2

video数据区 不定

script tag 数据区

略n字...

下面是自己写的一段根据上面对FLV文件结构的分析读取FLV播放时间的Delphi代码:


{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
Edit1.Text:=OpenDialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    iFileHandle:   Integer;
    iFileLength:   Integer;
    iBytesRead:   Integer;
    Buffer:   array   of   Byte;
    i:   Integer;
    str1,str2:String;
    tminute,tSecond,tMillisecond,tmptime:Integer;
begin
    if Edit1.Text = '' then
    begin
      ShowMessage('请选择文件!');
      exit;
    end;
    iFileHandle   :=   FileOpen( Edit1.Text ,   fmOpenRead);
    iFileLength   :=   FileSeek(iFileHandle,   0,   2);
    FileSeek(iFileHandle,   0,   0);
    SetLength(Buffer,   iFileLength);
    iBytesRead   :=   FileRead(iFileHandle,   Buffer[0],   iFileLength);
    FileClose(iFileHandle);
    str1   :=   '';
    for   i   := iBytesRead   -   4   to   iBytesRead   -   1   do
    begin
        str1   :=   str1   +   IntToHex(Buffer[i],2);
    end;
    str2   :=   '';
    for   i   := iBytesRead   -   StrToInt('$'+str1) to   iBytesRead   -   (StrToInt('$'+str1)-2)   do
    begin
        str2   :=   str2   +   IntToHex(Buffer[i],2);
    end;
    tMillisecond:=strtoint('$'+str2);
    tminute:=(tMillisecond div 1000) div 60;
    tSecond:=(tMillisecond div 1000) mod 60;
    tmptime:=tMillisecond mod 1000;
    Label2.Caption:=IntToStr(tminute)+'分'+IntToStr(tSecond)+'秒';
    Buffer   :=   nil;
end;
分享到:
评论

相关推荐

    flv文件格式分析器源码

    本项目提供的"flv文件格式分析器源码"是一个用C++编写的开源工具,它可以帮助开发者深入理解FLV文件的内部结构,进行解析和分析。 FLV文件格式主要由以下几部分组成: 1. **文件头**:文件头包含文件标识符、文件...

    FLV文件格式解析

    ### FLV文件格式详解 #### 一、FLV文件格式简介 FLV(Flash Video)是一种流行的流媒体视频格式,以其轻量级的文件体积、简单的封装方式以及便捷的网络播放特性著称。这些特点使得FLV非常适合在网络上传播,尤其是...

    flv文件格式说明

    ### FLV 文件格式详解 #### 一、FLV 文件格式简介 FLV(Flash Video)是一种流行的视频文件格式,主要用于在线视频播放。该格式由Macromedia开发,并于2005年被Adobe Systems收购后进一步发展。FLV格式以其高效的...

    FLV 文件格式解析

    FLV(Flash Video)文件格式是Adobe Systems开发的一种流行的视频流格式,主要用于互联网上的视频传播。在Android平台上,原生系统并不直接支持FLV文件的解析和播放,因此开发者需要理解其内部结构以便进行自定义...

    FLV测试文件下载

    这个“FLV测试文件下载”资源包含了三个FLV文件,旨在帮助用户测试他们的播放器、编码器或者流媒体服务,确保它们能正确处理FLV格式的内容。 1. **FLV格式介绍**:FLV是Adobe Systems为Flash Player设计的视频格式...

    flvAnalyser flv流分析工具

    1. **头部信息解析**:FLV Analyser能够解析FLV文件的头部信息,包括文件标识、文件长度、数据类型(音频、视频或脚本数据)等关键字段,这对于理解文件的基本构成至关重要。 2. **帧分析**:工具可以详细分析视频...

    FLV文件格式详解FLVTag

    FLV文件格式详细 FLV文件: FLVHeader FLVStream FLVHeader : Signature Version Flags Offset Signature : "FLV" Version : 0×01 Flags : 0×01 | 0×04 | 0×05 //1:video,4:audio,5:video+audio Offset : 0×00 0...

    FLV 视频格式分析工具

    1. **文件分析**:该工具能够打开FLV文件,并自动分析其文件结构,包括文件头信息、帧类型、编码格式、时间戳等关键数据。 2. **视频与音频详情**:工具可以详细展示每个视频帧的编码参数,如分辨率、帧率、编码器...

    输入flv直播地址实时分析flv文件

    首先,我们需要理解FLV文件格式。FLV文件是Adobe Flash支持的视频格式,包含音频和视频数据流。它分为头部信息(Header)、文件信息(File Data)和元数据(Metadata)。头部信息包含了文件版本、时间戳、帧类型等...

    FLV封装格式分析器 1.1 (源代码)

    本文将深入探讨FLV封装格式,并基于"FLV封装格式分析器 1.1 (源代码)"的描述,介绍如何分析FLV文件以及其视频流和音频流的分离。 首先,FLV文件的结构主要由文件头、文件体和文件尾三部分组成。文件头包含了FLV...

    FLV封装格式分析器(程序+源代码)

    FLV(Flash Video)封装格式是一种广泛用于网络流媒体传输的文件格式,尤其在过去的互联网视频分享平台中非常常见。这个"FLV封装格式分析器"是一个专门用于解析和理解这种格式的工具,由个人开发者制作,并且开源,...

    FLV格式解析和提取FLV中的H264视频流和AAC音频流代码

    FLV媒体文件的解析,本代码实现了FLV文件文件格式的解析(含有代码注释) 1.解析FLV 文件头 2.解析FLV Body内容,包括解析PreviousTagSize 和Tag 标签内容(Script Tag, Audio Tag, Video Tag) 3.提取FLV文件的H264...

    flv格式分析工具

    仿照雷老师flv格式分析器写的一个flv分析工具,主要功能如下 1、flv音视频解析,包括视频的基本参数信息,音视频每一帧的大小和时间戳大小,以及一些其他每部参数信息 2、flv视频流和音频流分离功能 3、视频和音频...

    Flv文件分析工具

    FLV(Flash Video)文件格式是Adobe Systems用于网络流媒体的一种流行格式,广泛应用于在线视频内容的发布。本文将深入探讨“Flv文件分析工具”及其相关知识点。 首先,让我们理解FLV文件的结构。FLV文件由一个文件...

    flv格式文件播放器下载

    FLV(Flash Video)格式是Adobe Systems开发的一种流媒体视频文件格式,主要用于互联网上的视频传播。它具有体积小、加载快、兼容性好等特点,因此在早些年间的网页视频内容中非常流行。然而,随着HTML5的发展和...

    Flv文件解析(c#,包含flv文件结构说明)

    FLV(Flash Video)文件是Adobe Systems用于网络流媒体的一种文件格式,广泛应用于在线视频分享和直播服务。本文将深入探讨FLV文件的结构,并介绍如何使用C#进行解析。 一、FLV文件结构 1. 文件头:FLV文件以“FLV...

    flv测试工具与测试文件

    一、FLV文件格式 FLV格式由Adobe Systems开发,用于在Flash Player中播放视频内容。它包含音频、视频数据流以及元数据,支持实时流传输,使得网页上的视频播放成为可能。FLV文件通常包括H.263或H.264编码的视频和AAC...

    flv格式封装分析

    flv格式封装分析器 介绍了flv各个tag的字段及意义,使其对flv封装格式有更好的了解。

    FLV文件分割合并格式转换

    然而,随着需求的变化,用户可能需要对FLV文件进行各种操作,比如分割、合并或转换格式。本文将深入探讨这些主题,以及如何实现这些功能。 首先,FLV文件的分割是常见的需求,这可能是为了提取视频中的特定部分,...

    C++实现h264码流保存为FLV文件

    FLV(Flash Video)则是Adobe公司推出的一种流媒体文件格式,主要用于网络视频播放,尤其是在Flash Player时代非常流行。 实现H264码流到FLV文件的转换,我们需要以下几个关键步骤: 1. **解析H264码流**:H264码...

Global site tag (gtag.js) - Google Analytics