Flv 视频格式(转)

最近要用到flv,整理了一些flv格式的资料,供参考。 flv文件主要由两部分组成:header和body。

1.header

header部分记录了flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes。具体格式如下:

文件类型 3 bytes “FLV”
版本 1 byte 一般为0x01
流信息 1 byte 倒数第一位是1表示有视频,倒数第三位是1表示有音频,倒数第二、四位必须为0
header长度 4 bytes 整个header的长度,一般为9;大于9表示下面还有扩展信息

2.body

body部分由一个个Tag组成,每个Tag的下面有一块4bytes的空间,用来记录这个tag的长度,这个后置用于逆向读取处理,他们的关系如下图:

2.1.Tag

每个Tag由也是由两部分组成的:Tag Header和Tag Data。Tag Header里存放的是当前Tag的类型、数据区(Tag Data)长度等信息,具体如下:

名称 长度 介绍
Tag类型 1 bytes 8:音频 9:视频 18:脚本 其他:保留
数据区长度 3 bytes 在数据区的长度
时间戳 3 bytes 整数,单位是毫秒。对于脚本型的tag总是0
时间戳扩展 1 bytes 将时间戳扩展为4bytes,代表高8位。很少用到
StreamsID 3 bytes 总是0
数据区(data) 由数据区长度决定 数据实体

2.2.Tag Data

数据区根据Tag类型的不同可分为三种,音频数据、视频数据和脚本数据。

2.2.1.音频数据

第一个byte是音频的信息,格式如下。

名称 长度 介绍
音频格式 4 bits 0 = Linear PCM, platform endian 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
采样率 2 bits 0 = 5.5-kHz 1 = 11-kHz 2 = 22-kHz 3 = 44-kHz 对于AAC总是3
采样的长度 1 bit 0 = snd8Bit 1 = snd16Bit 压缩过的音频都是16bit
音频类型 1 bit 0 = sndMono 1 = sndStereo 对于AAC总是1

第2byte开始就是音频流数据了。

2.2.2.视频数据

和音频数据一样,第一个byte是视频信息,格式如下:

名称 长度 介绍
帧类型 4 bits 1: keyframe (for AVC, a seekable frame) 2: inter frame (for AVC, a non-seekable frame) 3: disposable inter frame (H.263 only) 4: generated keyframe (reserved for server use only) 5: video info/command frame
编码ID 4 bits 1: JPEG (currently unused) 2: Sorenson H.263 3: Screen video 4: On2 VP6 5: On2 VP6 with alpha channel 6: Screen video version 2 7: AVC

2.2.3脚本数据

脚本Tag一般只有一个,是flv的第一个Tag,用于存放flv的信息,比如duration、audiodatarate、creator、width等。

首先介绍下脚本的数据类型。所有数据都是以数据类型+(数据长度)+数据的格式出现的,数据类型占1byte,数据长度看数据类型是否存在,后面才是数据。 其中数据类型的种类有:

  • 0 = Number type
  • 1 = Boolean type
  • 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

如果类型为String,后面的2bytes为字符串的长度(Long String是4bytes),再后面才是字符串数据;如果是Number类型,后面的8bytes为Double类型的数据;Boolean类型,后面1byte为Bool类型。

知道了这些后再来看看flv中的脚本,一般开头是0x02,表示String类型,后面的2bytes为字符串长度,一般是0x000a(“onMetaData”的长度),再后面就是字符串“onMetaData”。好像flv格式的文件都有onMetaData标记,在运行ActionScript的时候会用到它。后面跟的是0x08,表示ECMA Array类型,这个和Map比较相似,一个键跟着一个值。键都是String类型的,所以开头的0x02被省略了,直接跟着的是字符串的长度,然后是字符串,再是值的类型,也就是上面介绍的那些了。

3.总结

flv的格式还是比较简单的,header部分很简洁,body部分都是由一个个tag,tag的话也就三种,脚本tag一般只有一个的,我想这也是flv能成为在线视频格式的原因吧。只要了解了格式,我们就可以写个程序来解析flv文件了,这也是我下一步要做的。 最后附上flv官方手册:video_file_format_spec_v10

时间: 2024-08-30 03:53:02

Flv 视频格式(转)的相关文章

html文件中flash视频格式(flv、swf)文件的嵌入方法

flash文件的格式:.FLV 和 .SWF flash视频格式有两种扩展名可以使用:.flv和.swf.他们有什么不同呢? (1)一个.flv文件(flash视频)是基于图片的视频流和音频.如果你在运行一个流服务,flv将是一个好的选择.上游条件是,这个文件的任何部分可以被客户终端访问,并且任何时间不会等待下载.话又说回来了,运行一个流服务待价昂贵. (2).swf也是Macromedia Flash文件格式,是一个完整的视频-音频文件,并具有脚本和其它更多的.这将有利于HTTP(渐进式)下载

如何使用视频格式转换器将flv转换成MP4

视频泛指将一系列静态影像连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果.今天我们来谈论一下转换视频格式的方法,下面会用到视频转换器,小编推荐的是迅捷视频转换器,请看下文对操作方法的介绍.   视频转换器www.xunjieshipin.com/download-converter 方法步骤 FLV是被众多新一代视频分享网站所采用,是目前增长最快.最为广泛的视频传播格式.是在sorenson公司的压缩算法的基础上开发出

视频格式与编码问题分析

一.什么是视频格式? 视频格式是一种封装格式,就是把编码后的比特流进行封装,不同的视频格式封装方法不同.目前视频都是由音频流+视频流组成.格式只是封装容器,例如rmvb,mkv,MP4,mpg,ts等等.常见的视频流有MPEG2,MPEG4,H264,VC1等等,MPEG2是比较老式的视频编码,压缩率很低.MPEG4是比较新的编码,常见于DVD影片等等,压缩率一般,最新的MPEG4视频编码是Xvid,还有比较老的DivX.H264(X264是H264的一种)是新生的视频编码,常见于高清视频中,压

硕鼠FLV视频下载软件0.4.7.6去广告绿色版

硕鼠是由著名FLV在线解析网站官方制作的专业FLV下载软件.提供土豆.优酷.我乐.酷六.新浪.搜狐.CCTV等90个主流视频网站的解析+下载+合并/转换一条龙服务.(支持网站不断更新中) 硕鼠支持多线程下载,可智能选择地址,自动命名,FLV/MP4自动合并,智能分类保存,特色的“一键”下载整个专辑的功能,无需人工干预,并集成了转换工具可将下载文件批量转换为3gp,AVI,MP4等格式. 特点 专业的解析引擎,强大的批量下载能力,全面的后期处理工具.,绿色轻盈小巧,无插件,无恶意代码 00.绿色版

ffmpeg视频格式转换中关键帧的设置

在用ffmpeg转换视频到flv过程中,需要设置关键帧的间隔,以便在播放过程中实现精确定位.在网上查找了不少,最后发现这个指令有效: -g 1 -keyint_min 2 . http://blog.csdn.net/windflow/article/details/6228088 还没试,要试试-- ffmpeg视频格式转换中关键帧的设置,布布扣,bubuko.com

FLV封装格式分析

FLV官方文档:https://github.com/jiayayao/DataSheet/tree/master/media%20format/flv 一.FLV格式 FLV包括文件头(FLV header)和文件体(FLV Body)两部分,其中文件体由一系列的Tag组成.如下图所示: FLV header一共9个字节,分别是: Signature(3个字节)总是"FLV",即0x46, 0x4c, 0x56; Version(1个字节) 总是1,即0x01; Flags(1个字节

视音频数据处理入门:FLV封装格式解析

===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理入门:PCM音频采样数据处理 视音频数据处理入门:H.264视频码流解析 视音频数据处理入门:AAC音频码流解析 视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 ===================================================

配置 nginx 支持 f4v视频格式播放

Nginx默认不支持f4v视频格式播放,解决方法为编辑mime.types文件,在video/mp4加上f4v即可 types {   # Data interchange     application/atom+xml                  atom;     application/json                      json map topojson;     application/ld+json                   jsonld;     

Java实现视频格式转化

核心是利用ffmpeg进行视频转换,我们自己并不写转换视频的代码,只是调用ffmpeg,它会帮我们完成视频的转换.ffmpeg支持的类型有:asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等,这些类型,可以利用ffmpeg进行直接转换.ffmpeg不支持的类型有:wmv9,rm,rmvb等,这些类型需要先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. 废话不大多说了,首先要把相关的库和要转化的视频准备好,如下图 下面就是代码部分了 package