- 浏览: 237640 次
- 性别:
- 来自: 南京
-
最新评论
-
baby8117628:
vc下mp3 IDv1和IDV2的读取 -
gezexu:
你好,我按照你的步骤一步步进行但是安装libvorbis的时候 ...
linux如何搭建强大的FFMPEG环境 -
ini_always:
帅哥,转载也把格式做好点,另外出处也要注明一下吧。。。
MP3文件格式解析
我对FLV 文件格式的理解
------------------------------------------
通篇文章为作者(eleel)本人对adobe官方文件的理解。
只对感兴趣的,自认为当下用得着的部分进行分析,试图保证理解的正确性,
不过作者为流媒体的门外汉,出现错误是可能性较大。
以前只用过一个FLV合并器,
不过此合并器合并后的文件有点小问题,
有些播放器不能完整播放,恰好我还必须用这个播放器,
所以就想自己写一个flv文件合并器。
/*=======================================//
经过一天的编码,自己写的flv文件合并器终于完成了。
1.解决了以前用过的合并程序在mp4播放器和psptube中
只能播放第一段的问题,
2.去除了多余的脚本段。
3.合并速度很快,感觉比原来用过的快一些。
程序提供给用的着的朋友,注程序纯绿色,绿到连作者的信息也没有。
程序下载地址:
http://www.rayfile.com/files/6d457bf3-9ad2-11de-a8d4-0014221f469f/
/=======================================*/
adobe官方文件:
http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf
这个文件对编程人员很有用。
------------------------------------------
FLV文件开始处是一个FLV头。
FLV头(FLV header)
==============================
Field Type Comment
Signature UI8 Signature byte always 'F' (0x46)
Signature UI8 Signature byte always 'L' (0x4C)
Signature UI8 Signature byte always 'V' (0x56)
Version UI8 File version (for example, 0x01 for FLV version 1)
TypeFlagsReserved UB[5] Must be 0
TypeFlagsAudio UB[1] Audio tags are present
TypeFlagsReserved UB[1] Must be 0
TypeFlagsVideo UB[1] Video tags are present
DataOffset UI32 Offset in bytes from start of file to start of body (that is, size of header)
--------------------------------
根据上边了解到FLV文件头按字节顺序格式为
====================================
项目 长度(字节) 说明
Signature 3 格式签名规定为 "FLV"这三个字母。
Version 1 版本 FLV文件的版本 ,目前所知0x01代表flv ver 1
TypeFlags 1 文件的标志位说明信息,包括四部分后边详细说明
DataOffset 4 文件内容的起始地点(同样是FLV头大小)
====================================
TypeFlags标志位是一字节,
其中最高5位保留,必须为0(官方文件这么说的),
第3位为TypeFlagsAudio,应该表示是否包括音频(后边写的文字也都是我自己的理解,
一般不会再加上应该、可能、也许之类的字眼了)。
第2位保留,必为0。
第1位为TypeFlagsVideo ,表示有视频。
FLV header介绍完了。
============================================
============================================
FLV文件体的基本结构情况的说明。
由许多Tag组成,Tag我称为标签段。每个标签段之间有一个4字节,表示上一个标签段的尺寸。
--------------------------------
0x00000000, 4字节总为0表示这是第一个tag的前边,表示没有第0个tag,第0个tag的尺寸总为0
tag1
tag1 size ,4字节
tag2
tag2 size ,4字节
tag3
tag3 size
...
...
...
tagn-1
tagn-1 szie
tagn
tagn size
----------------------------
其中每个tag段包括一个11字节长的头。
====================================
项目 长度(字节) 说明
TagType 1 TAG段的类型,下边有细说明。
DataSize 3 数据的尺寸,表示段内不包括此头的数据部分长度。
Timestamp 3 时间戳,
TimestampExtended 1 文件内容的起始地点(同样是FLV头大小)
StreamID 3 总为0
====================================
----
TagType 主要3种
8表示音频段。
9表示视频段。
18表示脚本段。
其它的表示为保留。
----
======================
视频、音频格式及数据内容就不提了,理解为一个FLV文件中有非常多的分成很小很小段的
视频与音频,这样就可以读出一段视频与音频,播放器播放一段。
======================
这里说说onMetaData,这个对我来说有些用。
有些FLV合并器,合并文件时只是单纯的把文件的各tag连到一起,并没有修改MetaData内
的相关信息,有些播放器确是根据MetaData内的相关信息计算总播放时长的,这就导致这些
播放器无法播放由那些FLV合并器合并的文件,所以。
MetaData里有许多相关媒体流的的信息,包括:
■ duration: 时长总秒数。
■ width: 视频宽度
■ height: 视频高度
■ videodatarate: 视频位率千位每秒
...
其它一些相关信息。
这里我关心的只有duration: 时长总秒数,这个数据需要在合并完成后进行修改。
onMetaData在脚本段中,通常一个flv只有一个脚本段,是文件的第一个段,当然这只是通常来说
因为官方文档中没有这个规定。
这里谈一下脚本段。
SCRIPTDATAVALUE
这里按数据的不同类型,有不同的数据结构。
具体指。
数据类型1个字节。
#####数据类型为:
2 :指 String type(SCRIPTDATASTRING)
这里说明如果发现数据类型为2,我就知道后边接了一个串类型(String type)数据。
String type包括。
项目 长度 说明
StringLength 2 串的长度(字节数)
StringData n 串的内容,长度由StringLength指出。
#####数据类型为:
8:指 ECMA array type(SCRIPTDATAVARIABLE[ECMAArrayLength])
这里说明如果发现数据类型为8,我就知道后边接了一个ECMA数组(ECMA array type)数据。
ECMA array type包括。
项目 长度 说明
Objects 4 数组中包括的对象数目。
数组对象成员* 这里指其它的数据信息,具体数据分别解析。
End 3 数组的结束标志总为9
数组内容包括:
数组对象1
数组对象2
...
数组对象n (n由Objects 数组中包括的对象数目决定)
其中每个数组对象:
项目 长度 说明
StringLength 2 对象的名称长度。
StringData n 对象名称,长度由StringLength指出。
objecttype 1 对象的数据类型。
数据 * 据体内容按不同类型分别处理。
#####数据类型为:
只标常用类型。
类型 说明 数据类型 占字节说明
0 = Number type DOUBLE 8
1 = Boolean type bool 1
2 = String type 上边已经说明,字节不固定
3 = Object type
4 = MovieClip type
5 = Null type
6 = Undefined type
7 = Reference type
8 = ECMA array type
10 = Strict array type
11 = Date type
12 = Long string type
=========================================
通常读到文件的duration经历类型只有
0 = Number type DOUBLE 8
1 = Boolean type bool 1
2 = String type 上边已经说明,字节不固定
8 = ECMA array type
所以重点理解了这几个类型,其它类型就先不看了,因为暂时还不需要。
注:文件中的数据类型为big-endian byte order,注意自行转换一下。
------------------------------------------
通篇文章为作者(eleel)本人对adobe官方文件的理解。
只对感兴趣的,自认为当下用得着的部分进行分析,试图保证理解的正确性,
不过作者为流媒体的门外汉,出现错误是可能性较大。
以前只用过一个FLV合并器,
不过此合并器合并后的文件有点小问题,
有些播放器不能完整播放,恰好我还必须用这个播放器,
所以就想自己写一个flv文件合并器。
/*=======================================//
经过一天的编码,自己写的flv文件合并器终于完成了。
1.解决了以前用过的合并程序在mp4播放器和psptube中
只能播放第一段的问题,
2.去除了多余的脚本段。
3.合并速度很快,感觉比原来用过的快一些。
程序提供给用的着的朋友,注程序纯绿色,绿到连作者的信息也没有。
程序下载地址:
http://www.rayfile.com/files/6d457bf3-9ad2-11de-a8d4-0014221f469f/
/=======================================*/
adobe官方文件:
http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf
这个文件对编程人员很有用。
------------------------------------------
FLV文件开始处是一个FLV头。
FLV头(FLV header)
==============================
Field Type Comment
Signature UI8 Signature byte always 'F' (0x46)
Signature UI8 Signature byte always 'L' (0x4C)
Signature UI8 Signature byte always 'V' (0x56)
Version UI8 File version (for example, 0x01 for FLV version 1)
TypeFlagsReserved UB[5] Must be 0
TypeFlagsAudio UB[1] Audio tags are present
TypeFlagsReserved UB[1] Must be 0
TypeFlagsVideo UB[1] Video tags are present
DataOffset UI32 Offset in bytes from start of file to start of body (that is, size of header)
--------------------------------
根据上边了解到FLV文件头按字节顺序格式为
====================================
项目 长度(字节) 说明
Signature 3 格式签名规定为 "FLV"这三个字母。
Version 1 版本 FLV文件的版本 ,目前所知0x01代表flv ver 1
TypeFlags 1 文件的标志位说明信息,包括四部分后边详细说明
DataOffset 4 文件内容的起始地点(同样是FLV头大小)
====================================
TypeFlags标志位是一字节,
其中最高5位保留,必须为0(官方文件这么说的),
第3位为TypeFlagsAudio,应该表示是否包括音频(后边写的文字也都是我自己的理解,
一般不会再加上应该、可能、也许之类的字眼了)。
第2位保留,必为0。
第1位为TypeFlagsVideo ,表示有视频。
FLV header介绍完了。
============================================
============================================
FLV文件体的基本结构情况的说明。
由许多Tag组成,Tag我称为标签段。每个标签段之间有一个4字节,表示上一个标签段的尺寸。
--------------------------------
0x00000000, 4字节总为0表示这是第一个tag的前边,表示没有第0个tag,第0个tag的尺寸总为0
tag1
tag1 size ,4字节
tag2
tag2 size ,4字节
tag3
tag3 size
...
...
...
tagn-1
tagn-1 szie
tagn
tagn size
----------------------------
其中每个tag段包括一个11字节长的头。
====================================
项目 长度(字节) 说明
TagType 1 TAG段的类型,下边有细说明。
DataSize 3 数据的尺寸,表示段内不包括此头的数据部分长度。
Timestamp 3 时间戳,
TimestampExtended 1 文件内容的起始地点(同样是FLV头大小)
StreamID 3 总为0
====================================
----
TagType 主要3种
8表示音频段。
9表示视频段。
18表示脚本段。
其它的表示为保留。
----
======================
视频、音频格式及数据内容就不提了,理解为一个FLV文件中有非常多的分成很小很小段的
视频与音频,这样就可以读出一段视频与音频,播放器播放一段。
======================
这里说说onMetaData,这个对我来说有些用。
有些FLV合并器,合并文件时只是单纯的把文件的各tag连到一起,并没有修改MetaData内
的相关信息,有些播放器确是根据MetaData内的相关信息计算总播放时长的,这就导致这些
播放器无法播放由那些FLV合并器合并的文件,所以。
MetaData里有许多相关媒体流的的信息,包括:
■ duration: 时长总秒数。
■ width: 视频宽度
■ height: 视频高度
■ videodatarate: 视频位率千位每秒
...
其它一些相关信息。
这里我关心的只有duration: 时长总秒数,这个数据需要在合并完成后进行修改。
onMetaData在脚本段中,通常一个flv只有一个脚本段,是文件的第一个段,当然这只是通常来说
因为官方文档中没有这个规定。
这里谈一下脚本段。
SCRIPTDATAVALUE
这里按数据的不同类型,有不同的数据结构。
具体指。
数据类型1个字节。
#####数据类型为:
2 :指 String type(SCRIPTDATASTRING)
这里说明如果发现数据类型为2,我就知道后边接了一个串类型(String type)数据。
String type包括。
项目 长度 说明
StringLength 2 串的长度(字节数)
StringData n 串的内容,长度由StringLength指出。
#####数据类型为:
8:指 ECMA array type(SCRIPTDATAVARIABLE[ECMAArrayLength])
这里说明如果发现数据类型为8,我就知道后边接了一个ECMA数组(ECMA array type)数据。
ECMA array type包括。
项目 长度 说明
Objects 4 数组中包括的对象数目。
数组对象成员* 这里指其它的数据信息,具体数据分别解析。
End 3 数组的结束标志总为9
数组内容包括:
数组对象1
数组对象2
...
数组对象n (n由Objects 数组中包括的对象数目决定)
其中每个数组对象:
项目 长度 说明
StringLength 2 对象的名称长度。
StringData n 对象名称,长度由StringLength指出。
objecttype 1 对象的数据类型。
数据 * 据体内容按不同类型分别处理。
#####数据类型为:
只标常用类型。
类型 说明 数据类型 占字节说明
0 = Number type DOUBLE 8
1 = Boolean type bool 1
2 = String type 上边已经说明,字节不固定
3 = Object type
4 = MovieClip type
5 = Null type
6 = Undefined type
7 = Reference type
8 = ECMA array type
10 = Strict array type
11 = Date type
12 = Long string type
=========================================
通常读到文件的duration经历类型只有
0 = Number type DOUBLE 8
1 = Boolean type bool 1
2 = String type 上边已经说明,字节不固定
8 = ECMA array type
所以重点理解了这几个类型,其它类型就先不看了,因为暂时还不需要。
注:文件中的数据类型为big-endian byte order,注意自行转换一下。
发表评论
-
vc下mp3 IDv1和IDV2的读取
2010-01-25 10:52 2450/*这是修改后的代码,VC下读ID3v2 & ID3v ... -
使用ffmpeg为库编写的小型多媒体播放器源代码
2010-01-21 16:52 4400今天突发奇想,就在以前音频播放器(详细情况请看这里——http ... -
ffmpeg提取音频播放器总结
2010-01-21 16:31 6056ffmpeg提取音频播放器总 ... -
ffmpeg开发指南
2010-01-20 17:26 3413ffmpeg 中的Libavformat 和 li ... -
linux下安装ffmpeg过程
2010-01-18 15:48 1922最近互联网视频共享的 ... -
【PNG overview】PNG专题!
2010-01-18 13:39 3426【PNG overview】PNG专题! 作者 鼯鼠 ... -
Big Endian 和 Little Endian
2010-01-18 13:29 1574Peter Lee 2008-04-20 一、字节序 ... -
MediaInfo开源工程
2010-01-18 13:22 2419一、简介 MediaInfo 用来 ... -
MP3文件格式解析
2010-01-18 10:58 3584MP3文件格式解析 Peter Lee 2008-06-0 ... -
LAME-mp3
2010-01-18 10:40 2077LAME - 压缩 MP3 的最佳利 ... -
FLV文件格式分析(图示讲解的清楚)
2010-01-14 15:56 5135FLV是一个二进制文件, ... -
常用的音频文件介绍
2010-01-13 10:56 1430MP3全称是动态影像专家压缩标准音频层面3(Moving Pi ... -
RTSP客户端的JAVA实现
2010-01-12 16:12 8398参考资料 1. 《RTSP简单命 ... -
国外嵌入式、音视频处理等重要网站
2010-01-08 10:07 2061嵌入式方面: 1.关于嵌入式开发的站点,提供非常多关于嵌入 ... -
RTSP点播——消息流程实例
2010-01-08 09:44 5140RTSP点播消息流程实例(客户端:VLC, RTSP服务器:L ... -
live555代码解读之三:SETUP和PLAY请求消息处理过程
2010-01-08 09:43 3513SETUP请求消息处理过程 ... -
live555代码解读之二:DESCRIBE请求消息处理过程
2010-01-08 09:42 3836ve555代码解读之二:DESCRIBE请求消息处理过程 ... -
live555代码解读之一:RTSP连接的建立过程
2010-01-08 09:42 4468TSPServer类用于构建一个RTSP服务器,该类同时在其内 ... -
live555源代码概述
2010-01-08 09:41 3915述 liveMedia项目(http://www ... -
浅议SDP(会话描述协议)
2010-01-04 15:25 3608因为最近常常使用到SDP(会话描述协议Session Desc ...
相关推荐
而`FLV文件格式解析.doc`则可能是对这份规范的中文解读,方便中国开发者理解和应用。 总之,掌握FLV文件格式对于在Android平台上实现自定义视频播放功能至关重要。通过阅读提供的文档,开发者可以学习如何解析和...
### FLV文件格式详解 ...通过以上对FLV文件格式的详细介绍,我们可以更深入地理解这种流行视频格式的内部构造和技术细节。对于开发者而言,掌握FLV文件的结构有助于更好地处理和分析这类视频文件。
本项目提供的"flv文件格式分析器源码"是一个用C++编写的开源工具,它可以帮助开发者深入理解FLV文件的内部结构,进行解析和分析。 FLV文件格式主要由以下几部分组成: 1. **文件头**:文件头包含文件标识符、文件...
2. **格式转换**:描述中提到的“带格式转换”意味着这款播放器可能还具备将FLV文件转换为其他常见格式如MP4、AVI、MKV等的能力,以适应不同的设备或平台的需求。 3. **安装程序**:文件列表中的`Setup_mini.exe`很...
然而,随着需求的变化,用户可能需要对FLV文件进行各种操作,比如分割、合并或转换格式。本文将深入探讨这些主题,以及如何实现这些功能。 首先,FLV文件的分割是常见的需求,这可能是为了提取视频中的特定部分,...
对于HTML5支持的FLV播放器,它们通常会使用JavaScript库,如Video.js或Flowplayer,结合服务器端的FFmpeg等工具,将FLV文件转换为适应HTML5的格式,如MP4或WebM。这样,即使在没有Flash支持的环境下,也能通过HTML5...
提供的压缩包文件中,`video_file_format_spec_v10.pdf`是Adobe官方发布的Flash Video File Format Specification,包含了详细的FLV文件格式规范,是理解和解析FLV文件的重要参考资料。`FlvFileParser`可能是示例...
`FLVPlayer_Progressive.swf`是Flash Player的SWF文件,这是一个可执行的Flash应用程序,负责解析并播放FLV格式的视频。它包含了视频播放、控制条、缓冲处理等功能。在HTML中通过`<object>`或`<embed>`标签引入这个...
C++作为一门强大的编程语言,可以用来解析FLV文件,理解其内部结构和内容。本篇文章将深入探讨如何使用C++来解析FLV文件。 FLV文件结构分为三大部分:文件头、文件数据标签和文件尾。文件头包含文件标识符、文件...
总的来说,实现C++中H264码流保存为FLV文件涉及了视频编码理解、文件格式转换、网络编程以及可能的多线程处理等多个领域的知识。通过深入学习和实践,开发者可以有效地实现这样的功能,为视频流媒体应用提供强有力的...
FLV文件的结构分为三部分:文件头、文件体和文件尾。文件头包含了文件的元信息,如文件类型和版本。文件体包含了视频和音频数据帧,每个数据帧都带有时间戳,用于同步音视频。文件尾则包含了文件的结束标记。 **...
在实际应用中,开发者需要将`flvjs`库引入项目,然后创建一个`flvPlayer`实例,设置视频源(可能是FLV文件的URL),并调用播放方法。同时,根据`index.html`中的示例,可能还需要配置控制栏、事件监听和错误处理等...
FLV(Flash Video)文件格式是Adobe公司开发的一种适合在线视频...需要注意的是,由于FLV文件格式规范更新迭代,本文档内容需要参照最新版本的FLV文件格式规范进行理解,以便于更好地掌握FLV格式的最新特点和技术细节。
HTML播放FLV文件一整套源码案例是一个...虽然现代Web开发更倾向于使用HTML5的`<video>`标签和MP4等跨平台格式,但了解如何处理FLV仍然是对历史技术的一种回顾,对于理解视频播放机制以及解决老项目中的问题非常有帮助。
首先,我们需要理解FLV文件格式。FLV文件是Adobe Flash支持的视频格式,包含音频和视频数据流。它分为头部信息(Header)、文件信息(File Data)和元数据(Metadata)。头部信息包含了文件版本、时间戳、帧类型等...
首先,我们需要理解FLV文件的基本结构。FLV文件由头、数据标签(Data Tags)和尾部(Footer)组成。头包含了文件标识、文件长度和FLV头,数据标签则包含了视频和音频帧,而尾部则是对文件的确认。H.264和AAC码流必须...
4. **兼容性**:FLV_Joiner工具通常对不同来源的FLV文件具有良好的兼容性,能够处理不同编码器生成的FLV文件。 5. **灵活性**:除了简单的合并功能,一些高级版本的FLV_Joiner还可能支持添加过渡效果、调整播放顺序...
实践是最好的老师,通过实际编写和调试代码,能加深对FLV文件格式和Java多媒体处理的理解。 9. **性能优化**: 当处理大型FLV文件时,内存管理和多线程技术变得至关重要。使用缓冲策略和流式处理可以减少内存占用...
这款工具能够帮助用户深入理解并操作FLV文件,满足多种需求,例如提取视频内容、音频流,或者进行格式转换。 首先,我们来了解一下FLV文件格式的基本结构。FLV文件由文件头、数据部分和文件尾组成。文件头包含文件...
1. FLV文件格式: FLV文件由多个数据块组成,每个块包含头部信息和数据体。头部信息定义了文件的结构,而数据体则包含视频帧、音频帧或元数据。理解FLV的文件结构是提取其内容的关键。 2. 数据块解析: FLV文件的...