刚才在看一些关于demux的东西,在处理flv格式的文件的时候,由于自己对flv文件的格式不了解,所以就比较云头转向,正好看到了一篇讲述flv文件格式的文章,写的比较明白,所以就转过来了。O(∩_∩)O~
flv头文件比较简单,由9个字节组成.

0-3:前3个字节是文件格式标识(FLV 464C56).
4-4:第4个字节是版本(0x01)
5-5:第5个字节的前5个bit是保留的必须是0.
         第5个字节的第6个bit音频类型标志(TypeFlagsAudio)
         第5个字节的第7个bit也是保留的必须是0
         第5个字节的第8个bit视频类型标志(TypeFlagsVideo)
6-9:第6-9的四个字节还是保留的.其数据为 00000009 .

文件内容是由4字节的0 开始,它标志着前一个tag的size(因为前一个tag为空,所以size为0).然后就是flv文件内容的第1个tag。tag类型为1个字节,有:8音频;9视频;18(0x12) 脚本数据;其它保留。每种tag有其特定类型。
1:如下图为data tag

data tags被flash player中的NetStream调用.一个meta包的内容由两个amf包组成.第一个(amf类型0x02)是基本上总是由2个字节带字符串长度+ 字符串组成,第二个(amf类型0x08)是由一个数组组成,数组中的各个元素是由不同类型组成。(The SWF file format uses 8-bit, 16-bit, 32-bit, 64-bit, signed, and unsigned integer types. All integer values are stored in the SWF file by using little-endian byte order.FLV files, unlike SWF files, store multibyte integers in big-endian byte order.)
data tags基本格式:

data tag数据组成(名字+数据):

上图中的数据分析如下:
0x12 data tag的类型标志.
000152 data tag的长度
000000 时间戳
00 时间戳扩展
000000 流id

0x02 data object的类型标志
000A object name的长度
6F6E4D65746144617461 object name(onMetaData)
08 第二个amf. data array的类型标志
0000000E 数组的长度
000D object name的长度
617564696F6461746172617465 object name(audiodatarate)
00 double类型数据标志
404C354DDA204355 double类型的数据值

2:如下图为 视频tag
视频 tags基本格式:

视频tags的数据:
/*----------------------------

帧类型 4bit
1: 关键帧keyframe(视频中的关键帧,数据存储的是整个画面完整的数据,可以提取它来生成图片)
2: 中间帧inter frame(关键帧之间的状态,不完整的画面数据,需要依靠前面帧的数据生成)
3: 可任意使用的中间帧disposable inter frame(H.263 only)

视频编码id 4bit
2: Sorenson H.263(mencoder转换所使用的视频编码)
3: Screen video
4: On2 VP6
5: On2 VP6 with alpha channel
6: Screen video version 2

视频数据 
If CodecID = 2
H263VIDEOPACKET
If CodecID = 3
SCREENVIDEOPACKET
If CodecID = 4
VP6FLVVIDEOPACKET
If CodecID = 5
VP6FLVALPHAVIDEOPAC
KET
If CodecID = 6
SCREENV2VIDEOPACKET

3:如下图为音频tag
音频tags基本格式:
/*---------------------------
tag数据大小 3个字节的音频数据大小 
tag时间戳 3个字节tag数据应用的时间(毫秒)
tag时间戳扩展 1个字节的时间戳扩展,让时间戳变成4字节,本字节作为时间戳的高位.
streamID 3个字节的类id,总是0
//-----------------------------------------------------------------------------------------------------------
音频tags的数据:
音频格式的数据的组成如下:
音频格式 4bit 0是未压缩的,1是ADPCM,2是mp3,5是Nellymoser 8kHz,6是Nellymoser.
音频率 2bit 0 = 5.5 kHz
   1 = 11 kHz
   2 = 22 kHz
   3 = 44 kHz
音频大小 1bit 0 = snd8Bit
   1 = snd16Bit
音频类型 1bit 0 = sndMono
   1 = sndStereo
音频数据 1个字节的音频数据大小,不同的音频数据格式

Nellymoser 8kHz 是一个特殊的类型—8kHz取样率在其它格式中不被支持.当音频的格式是Nellymoser 8kHz mono的时候,声音率和声音类型被忽略了. 对于其它的 Nellymoser取样率,音频格式和音频率照常.
参考资料:
flv文件格式解读:www.roading.net/blog/post_102.html
flv相关资源:blog.csdn.net/everlastinging/archive/2007/12/15/1939117.aspx
SWF and FLV File Format Specification License Agreement(flv格式文档下载):www.adobe.com/licensing/developer/fileformat/license/

FLV文件格式(Z)(转载)相关推荐

  1. flv 文件格式解析

    Overview Flash Video(简称FLV),是一种流行的网络格式.目前国内外大部分视频分享网站都是采用的这种格式. File Structure 从整个文件上开看,FLV是由The FLV ...

  2. SWF与FLV文件格式

    最近,因产品需要,开始研究FLV与SWF的文件格式,顺便编写了FLV与SWF文件的解析工具. 1. FLV File Format FLV文件格式比较简单,就是一个FLV Header加上一个FLV ...

  3. FLV文件格式解析部分代码

    转自:http://www.lougoo.com/blog/article.asp?id=856 前面在FLV文件格式大揭秘中介绍了FLV文件格式,其中也谈到了曾经编写的代码解析flv文件.应网友要求 ...

  4. FLV文件格式分析(附源码)

    FLV文件格式分析(附源码) FLV文件主要由两部分组成:Header和Body. 1. Header header部分记录了flv的类型.版本等信息,是flv的开头,一般都差不多,占9bytes.具 ...

  5. linux转换flv文件格式,安装和使用ffmpeg转换视频为flv文件(windows和linux)

    原贴:http://www.i1981.com/blog/article.asp?id=178 安装和使用ffmpeg转换视频为flv文件(windows和linux) 1.环境winxp-sp2下: ...

  6. Z理论(Theory Z) (转载)

    Z理论(Theory Z) Z理论(Theory Z)由日裔美国学者威廉·大内(William Ouchi)在1981年出版的<Z理论>一书中提出来的,其研究的内容为人与企业.人与工作的关 ...

  7. flv文件格式分析FlvParse.exe

    http://blog.csdn.net/zengraoli/article/details/7742278

  8. z转载:Mc3000开发培训(vb.net智能终端无线系统开发)

    无线终端开发培训文档 项目名称 Mc3000开发培训(vb.net智能终端无线系统开发) 项目号 项目阶段 日期 2006.9.20 工作要素 培训时间 16:00 培训人员 广州雄冠条码公司 培训程 ...

  9. FLV(ACC+H264)文件格式分析

    最近自己动手将H264视频流和AAC音频流合成flv文件,但是没有采用开源的ffmpeg的api来处理音视频流.方法就是模仿ffmpeg中libavformat/flvenc.c 文件写代码来完成音视 ...

最新文章

  1. 请求一个action,将图片的二进制字节字符串在视图页面以图片形式输出
  2. Bootstrap的datatable控件
  3. java 数据类型model_如何在角度2中使用类数据类型的ngModel?
  4. 关于孵化器类型的创业公司-面试注意事项
  5. eclipse maven jetty插件方式启动项目
  6. 以个人身份加入.NET基金会
  7. 数据结构----归并排序
  8. android使碎片切换界面,玩转Android中的碎片Fragment
  9. 等待队列中为什么需要互斥锁?一个线程在等待时被唤醒后会做什么?安全队列的代码实现
  10. kotlin学习笔记-异常好玩的list集合总结
  11. 吴恩达深度学习——深层神经网络
  12. 2018年湖南居民人均可支配收入25241元 出行餐饮成消费热点
  13. java新知识系列 六
  14. mfc 请求java_MFC使用WinHttp实现Http访问
  15. 小程序云函数实现微信支付如此简单
  16. php爬虫框架下载文件,php爬虫框架怎么安装
  17. [RFID]射频识别技术基础
  18. Gan 和 StyleGAN 架构
  19. Nicholas C. Zakas:我得到的最佳职业生涯建议
  20. python取消任务的方法_对Python定时任务的启动和停止方法详解

热门文章

  1. GetType和typeof的区别
  2. [你必须知道的.NET]第二十九回:.NET十年(上)
  3. 连接 Windows 防火墙
  4. Php点击更换封面,JavaScript_js实现点击图片改变页面背景图的方法,本文实例讲述了js实现点击图 - phpStudy...
  5. 关联规则挖掘算法_基于Apriori关联规则的协同过滤算法
  6. ElasticSearch - JAVAAPI练习
  7. CCNA-第六篇-静态路由+动态路由开头
  8. 【PAT - 甲级1020】Tree Traversals (25分)(树的遍历,给定中序后序,求层次遍历)
  9. 【HDU - 5869】Different GCD Subarray Query(思维,数学,gcd,离线处理,查询区间不同数,树状数组 或 二分RMQ)
  10. 【HDU - 6514】Monitor(二维差分,前缀和)