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

[转]FLV格式

 
阅读更多

FLV文件格式分析

作者:Eric.wang ( 273578147@qq.com)

 于 2012-04-04 14:43:45,转载请注明。

 少点转载,多点原创。

最近做RTMP Client,费力很大功夫终于把H264码流推送到Red5服务器上,封装包的时候用到FLV文件格式,下面是结合FLV Format Specification进行的分析。

1.        FLV文件对齐方式

FLV文件以大端对齐方式存放多字节整型。

如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。

如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。

2.        FLV文件格式

FLV文件格式比较简单,分为Header和Body两部分。

即:|FLV_Header(9)|FLV_Body(n)|,括号里是长度,以byte为单位。

以下分别介绍Header和Body的具体内容格式。

3.        FLV Header格式

FLV Body的内容长度是固定的,格式如下:

| F(8) | L(8) | V(8) | Version(8) | TypeFlagsReserved(5) | TypeFlagsAudio(1)| TypeFlagsReserved(1) | TypeFlagsVideo(1) | DataOffset(32) |.

可知FLV Header头部的长度为9 bytes。

前三个字节为FLV,十六进制表示为 0x46 0x4C 0x56。

Version为FLV的版本号,一般为0x01。

TypeFlagsReserved为保留位,均为0

TypeFlagsAudio为FLV文件中是否包括音频数据,1是有,0是没有。

TypeFlagsVideo为FLV文件中是否包括视频数据,1是有,0是没有。

DataOffset为FLV Header的长度,为固定值0x00000009。

4.        FLV Body格式

FLV Body的内容为多个Tag和Tag的长度组成。

即:

| PreviousTagSize0(32) | Tag1(PreviousTagSize1) |PreviousTagSize1(32) | Tag2 | ……| PreviousTagSizeN-1(32) | TagN(previousTagSizeN)| previousTagSizeN(32) |

PreviousTagSize0为0x00000000。

Tag为每一个内容,目前包括音频、视频、脚本。

previousTagSize为前一个Tag的长度。

5.        FLV Tag格式

FLV Tag是FLV Body的内容,具体Tag同样是由Tag Header和Tag Data组成。

即FLV Tag Format :

| TagType(8) | DataSize(24) | Timestamp(24) |TimestampExtended(8) | StreamID(24) | Data(DataSize) |

TagType为Tag的类型:

目前支持的类型:

音频为0x08;

视频为0x09;

脚本数据为0x12。

DataSize为Data的长度。

Timestamp为相对第一个Tag的时间戳,因此第一个Tag的时间戳为0。也可以将所有Tag的时间戳全配置为0,解码器会自动处理。

StreamID为默认的全为0。

Data为具体的数据内容,

如果TagType=0x08,为AudioData;

如果TagType=0x09,为VideoData;

如果TagType=0x12,为ScriptDataObject,但该项因为内容不固定,所以在FLV文件中可以没有该Tag内容。

6.        VideoData格式

VideoData的内容,同样包括VideoData Header和VideoData Body。

即VideoData Format:

Video Header = | FrameType(4) | CodecID(4) |

VideoData = | FrameType(4) | CodecID(4) | VideoData(n) |

FrameType为数据类型,1为关键帧,2为非关键帧,3为h263的非关键帧,4为服务器生成关键帧,5为视频信息或命令帧。

CodecID为包装类型,1为JPEG,2为H263,3为Screen video,4为On2 VP6,5为On2 VP6,6为Screen videoversion 2,7为AVC。

VideoData为数据具体内容:

如果CodecID=2,为H263VideoPacket;

如果CodecID=3,为ScreenVideopacket;

如果CodecID=4,为VP6FLVVideoPacket;

如果CodecID=5,为VP6FLVAlphaVideoPacket;

如果CodecID=6,为ScreenV2VideoPacket;

如果CodecID=7,为AVCVideoPacket;

7.        AVCVideoPacket格式

AVCVideoPacket同样包括Packet Header和Packet Body两部分:

即AVCVideoPacket Format:

| AVCPacketType(8)| CompostionTime(24) | Data |

AVCPacketType为包的类型:

         如果AVCPacketType=0x00,为AVCSequence Header;

         如果AVCPacketType=0x01,为AVC NALU;

         如果AVCPacketType=0x02,为AVC end ofsequence

CompositionTime为相对时间戳:

         如果AVCPacketType=0x01, 为相对时间戳;

         其它,均为0;

Data为负载数据:

         如果AVCPacketType=0x00,为AVCDecorderConfigurationRecord;

         如果AVCPacketType=0x01,为NALUs;

         如果AVCPacketType=0x02,为空。

8.        AVCDecorderConfigurationRecord格式

AVCDecorderConfigurationRecord包括文件的信息。

具体格式如下:

| cfgVersion(8) | avcProfile(8) | profileCompatibility(8) |avcLevel(8) | reserved(6) | lengthSizeMinusOne(2) | reserved(3) | numOfSPS(5) |spsLength(16) | sps(n) | numOfPPS(8) | ppsLength(16) | pps(n) |

 

未完,待续...

 

转载自:http://www.cnblogs.com/ericdev/archive/2012/03/11/2390532.htmljavascript:mctmp(0);

分享到:
评论

相关推荐

    纯java代码实现各种视频转flv格式,支持在线播放。

    首先,我们需要了解FLV格式。FLV是一种流行的网络流媒体格式,主要由Adobe Systems开发,用于在Flash Player中播放视频和音频内容。它的优点在于文件体积小、加载速度快,特别适合在网络上传输和在线播放。 Java...

    flv AVI转换器,支持flv转AVI格式 avi转flv格式

    例如,如果你有一段FLV格式的视频,但你的多媒体播放器不支持这种格式,你可以通过这个转换器将其转换为AVI,这样就能顺利播放了。 转换过程中,软件提供了“定制”和“默认”两种模式。在将AVI转换为FLV时,如果...

    java把各种视频格式转化为flv

    Java是一种广泛使用的编程语言,它不仅用于开发Web应用程序和企业级系统,还可以处理多媒体处理...总的来说,通过Java结合FFmpeg或JAVE,我们可以方便地实现跨平台的视频格式转换,包括将各种格式的视频转为FLV格式。

    H264视频流文件转flv文件源码实现(C语言,不用第三方库)

    H264视频流文件转flv文件源码实现(C语言,不用第三方库) H264视频流文件转flv文件源码实现(C语言,不用第三方库) H264视频流文件转flv文件源码实现(C语言,不用第三方库) 附加flv解析工具 附加flv解析工具 ...

    mp4转flv格式视频转换器v3.7.rar

    Bigasoft FLV Converter是一款FLV视频转换工具,它可以将其他视频格式,如MP4/AVI/等直接转换为FLV格式,反过来也可以将FLV转为AVI/MP4等格式,其使用方法非常简单,软件界面上有详细的操作说明。即使你是新手也...

    任意视频转FLV格式工具

    2FLV:将任意视频格式转换成FLV格式的工具 ┆V1.1 汉化版

    万能版FLV格式转换器(转换成FLV格式)

    《全面解析:万能版FLV格式转换器与FLV转换技术》 在数字媒体领域,FLV(Flash Video)格式因其在网络流媒体播放中的广泛使用而备受关注。这款名为“万能版FLV格式转换器”的工具,正如其名,能够将几乎所有的视频...

    如何快速不借用转换工具将FLV格式视频转换成MP4

    ### 如何快速不借用转换工具将FLV格式视频转换成MP4 在当前数字化时代,视频格式转换是一项常见的需求,特别是在处理不同设备兼容性问题时。本文将详细介绍一种无需使用第三方转换软件,仅通过Windows系统自带的...

    flv格式转换+截图安装包

    总的来说,这个“flv格式转换+截图安装包”是一个实用的工具,能够帮助用户解决FLV文件与其他格式互转的问题,同时提供便捷的截图服务。对于经常处理视频文件的个人或专业工作者来说,它是一个值得信赖的辅助工具。...

    QSV2FLV格式转换器V2.2免安装版.rar

    一款绿色版的QSV转FLV格式转换器,版本号V2.2。本软件仅用于学习交流。QSV是一种缓存文件,只能使用其专用播放器进行播放,如果想转换到其他格式,就必须要用到这个视频转换器。除了转换单个文件外,还可以添加批量...

    flv转换器可转换MP3,MP4,MP5,CD,DVD,MPEG,SWF等多种格式

    1. FLV格式详解 FLV是Adobe Flash Player支持的视频格式,主要用于互联网上的流媒体播放。由于其体积小、加载快的特点,被众多网站用于在线视频传输。然而,由于技术的发展,Flash逐渐被淘汰,FLV的兼容性也受到影响...

    最好用的转码工具 各类格式转FLV 速度快质量高 你值得拥有

    然而,由于不是所有设备都支持FLV格式,因此,将其他格式的文件转成FLV就显得尤为重要。 三、格式工厂转换FLV的高效与质量 格式工厂在转换FLV格式时,展现出其速度与质量的双重优势。它采用高效的编码算法,能在短...

    用java程序调用ffmpeg执行视频文件格式转换flv

    在本文中,我们将深入探讨如何使用Java程序调用FFmpeg执行视频文件格式转换,特别是将非FFmpeg原生支持的格式转换为FLV格式。FFmpeg是一个强大的多媒体处理工具,支持多种视频、音频格式的编码、解码和转换。在这个...

    flv转mp3工具

    将FLV文件转换为MP3,主要是为了提取视频中的音频内容,方便在不支持FLV格式的设备上播放,或者是为了节省存储空间。 “flv转mp3工具”就是为此目的设计的软件或在线服务,它可以快速、简单地将FLV文件中的音频轨道...

    java实现rtsp/rtmp转m3u8/flv/hls/mp4等实现web直播和回放

    Java 实现 RTSP/RTMP 转 M3U8/FLV/HLS/MP4 是网络直播和视频回放的重要技术,它涉及到多种协议、工具和格式的交互。在这个场景下,Java 通常作为后端处理服务器,处理来自不同来源(如海康、大华等监控设备)的实时...

    这是把迅雷看看格式转换为FLV格式的软件

    因此,有时我们需要将XV格式转换为更通用的FLV格式,以在更多设备上播放或上传到互联网平台。 FLV(Flash Video)格式是Adobe Systems开发的一种流媒体格式,广泛应用于在线视频分享网站,如YouTube。它支持高质量...

    视频转换为flv格式 flash播放

    FLV格式是Adobe Systems为Flash Player设计的,它支持流式传输,允许用户在视频开始播放时不必等待整个文件下载完毕。这种格式的优点在于其小巧的体积和良好的兼容性,使得在低带宽环境下也能流畅播放视频。 二、...

    flv格式视频播放demo

    本示例“flv格式视频播放demo”专注于展示如何在网页中实现FLV(Flash Video)格式的视频播放。FLV是Adobe Flash平台广泛支持的一种流式视频格式,尤其在早年网络带宽有限时,它是提供在线视频内容的主流方式。 ...

    flv格式转换软件

    flv格式可转换成其他视频格式

    迅雷看看格式转flv xv2flv

    【迅雷看看格式转FLV XV2FLV详解】 迅雷看看是一款流行的在线视频播放软件,它支持多种视频格式,提供了便捷的视频观看体验。然而,有时用户可能需要将迅雷看看格式的视频转换为FLV格式,以便于在其他平台或设备上...

Global site tag (gtag.js) - Google Analytics