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);
相关推荐
首先,我们需要了解FLV格式。FLV是一种流行的网络流媒体格式,主要由Adobe Systems开发,用于在Flash Player中播放视频和音频内容。它的优点在于文件体积小、加载速度快,特别适合在网络上传输和在线播放。 Java...
例如,如果你有一段FLV格式的视频,但你的多媒体播放器不支持这种格式,你可以通过这个转换器将其转换为AVI,这样就能顺利播放了。 转换过程中,软件提供了“定制”和“默认”两种模式。在将AVI转换为FLV时,如果...
Java是一种广泛使用的编程语言,它不仅用于开发Web应用程序和企业级系统,还可以处理多媒体处理...总的来说,通过Java结合FFmpeg或JAVE,我们可以方便地实现跨平台的视频格式转换,包括将各种格式的视频转为FLV格式。
H264视频流文件转flv文件源码实现(C语言,不用第三方库) H264视频流文件转flv文件源码实现(C语言,不用第三方库) H264视频流文件转flv文件源码实现(C语言,不用第三方库) 附加flv解析工具 附加flv解析工具 ...
Bigasoft FLV Converter是一款FLV视频转换工具,它可以将其他视频格式,如MP4/AVI/等直接转换为FLV格式,反过来也可以将FLV转为AVI/MP4等格式,其使用方法非常简单,软件界面上有详细的操作说明。即使你是新手也...
2FLV:将任意视频格式转换成FLV格式的工具 ┆V1.1 汉化版
《全面解析:万能版FLV格式转换器与FLV转换技术》 在数字媒体领域,FLV(Flash Video)格式因其在网络流媒体播放中的广泛使用而备受关注。这款名为“万能版FLV格式转换器”的工具,正如其名,能够将几乎所有的视频...
### 如何快速不借用转换工具将FLV格式视频转换成MP4 在当前数字化时代,视频格式转换是一项常见的需求,特别是在处理不同设备兼容性问题时。本文将详细介绍一种无需使用第三方转换软件,仅通过Windows系统自带的...
总的来说,这个“flv格式转换+截图安装包”是一个实用的工具,能够帮助用户解决FLV文件与其他格式互转的问题,同时提供便捷的截图服务。对于经常处理视频文件的个人或专业工作者来说,它是一个值得信赖的辅助工具。...
一款绿色版的QSV转FLV格式转换器,版本号V2.2。本软件仅用于学习交流。QSV是一种缓存文件,只能使用其专用播放器进行播放,如果想转换到其他格式,就必须要用到这个视频转换器。除了转换单个文件外,还可以添加批量...
1. FLV格式详解 FLV是Adobe Flash Player支持的视频格式,主要用于互联网上的流媒体播放。由于其体积小、加载快的特点,被众多网站用于在线视频传输。然而,由于技术的发展,Flash逐渐被淘汰,FLV的兼容性也受到影响...
然而,由于不是所有设备都支持FLV格式,因此,将其他格式的文件转成FLV就显得尤为重要。 三、格式工厂转换FLV的高效与质量 格式工厂在转换FLV格式时,展现出其速度与质量的双重优势。它采用高效的编码算法,能在短...
在本文中,我们将深入探讨如何使用Java程序调用FFmpeg执行视频文件格式转换,特别是将非FFmpeg原生支持的格式转换为FLV格式。FFmpeg是一个强大的多媒体处理工具,支持多种视频、音频格式的编码、解码和转换。在这个...
将FLV文件转换为MP3,主要是为了提取视频中的音频内容,方便在不支持FLV格式的设备上播放,或者是为了节省存储空间。 “flv转mp3工具”就是为此目的设计的软件或在线服务,它可以快速、简单地将FLV文件中的音频轨道...
Java 实现 RTSP/RTMP 转 M3U8/FLV/HLS/MP4 是网络直播和视频回放的重要技术,它涉及到多种协议、工具和格式的交互。在这个场景下,Java 通常作为后端处理服务器,处理来自不同来源(如海康、大华等监控设备)的实时...
因此,有时我们需要将XV格式转换为更通用的FLV格式,以在更多设备上播放或上传到互联网平台。 FLV(Flash Video)格式是Adobe Systems开发的一种流媒体格式,广泛应用于在线视频分享网站,如YouTube。它支持高质量...
FLV格式是Adobe Systems为Flash Player设计的,它支持流式传输,允许用户在视频开始播放时不必等待整个文件下载完毕。这种格式的优点在于其小巧的体积和良好的兼容性,使得在低带宽环境下也能流畅播放视频。 二、...
本示例“flv格式视频播放demo”专注于展示如何在网页中实现FLV(Flash Video)格式的视频播放。FLV是Adobe Flash平台广泛支持的一种流式视频格式,尤其在早年网络带宽有限时,它是提供在线视频内容的主流方式。 ...
flv格式可转换成其他视频格式
【迅雷看看格式转FLV XV2FLV详解】 迅雷看看是一款流行的在线视频播放软件,它支持多种视频格式,提供了便捷的视频观看体验。然而,有时用户可能需要将迅雷看看格式的视频转换为FLV格式,以便于在其他平台或设备上...