上一篇博文“FLV文件格式解析”提到的小工具FLVParse,是由于工作需要,我自己写的一个小程序。
这个工具的主要功能是查看FLV的文件结构,帮助我们理解FLV格式。另外,如果涉及到处理FLV文件的开发,这个工具对于查看处理结果非常有帮助。因此我觉得有必要写一个使用说明,希望这个工具能够给大家提供帮助。

打开后的界面如下图所示。

先说一下界面布局:左上方是FLV文件的结构树,右边是FLV文件的字节流数据;左侧结构树下面依次是结构树的信息等级选择、高速模式选择、文件分析用时及进度条等;下方是分析文件的地址显示以及文件选择按钮。下面详细介绍一下相关部分。
   
    结构树及信息等级
    FLV结构树是这个工具最重要的显示信息,用户可以直观的查看当前FLV文件的结构。FLVParse默认FLV文件结构树的形式为:File Header + Metadata Tag(1个) + Video or Audio Tags(按顺序)。
    结构树的信息详细程度是按等级划分的,之所以要分等级,是为了区分显示信息的详细程度,因为不同程度的分析对于分析所用的时间影响是比较大的(主要在UI界面上),越详细的信息等级占用分析时间越长。一共有6个等级,按从简单到详细介绍如下。
    only section position info  —— 只有每个section的位置信息,如下图所示。其中每个section后的方括号里是位置信息(十六进制表示),每个“Pre Tag Size”后面的数字表示size的大小(十进制表示),Video&Audio Tag按照在文件中的顺序依次排序标号;

file header info, metadata info  —— 只有File Header + Metadata Tag的详细信息,如下图所示。其中File Header的详细结构信息会在子树中列出,并在每项后面标示该项的值;Metadata Tag类似,包含Tag Header和Tag Data两个子树,并且对应子项的详细信息也都列出;

file header info, metadata info, tag position info  —— 包含File Header + Metadata Tag的详细信息,Video&Audio Tags的位置信息,以及Pre Tag Size信息,如下图所示;

file header info, metadata info, tag section position info  —— 比上个等级多出Video&Audio Tags的Tag Header和Tag Data的位置信息,如下图所示;

file header info, metadata info, tag header info  —— 比上个等级多出Tag Header的详细子项信息,如下图所示;

file header info, metadata info, tag info  —— 比上个等级多出Tag Data的详细子项信息,如下图所示。

FLV字节流数据显示
    右侧显示了FLV文件的数据,可以让用户方便地查询对应位置上的字节。每一行都以一个十六进制的位置开始,该位置为相对于文件开头的位置。每一行有十六个字节,每个字节按高4位和第4位显示2个十六进制的字符,用户可以滑动滚动条查看任意位置的字节。
    当用户选中左边结构树中的某项时,右边数据会自动选中对应的数据区域(绿色),根据不同项的类型,选中的区域大小也会自动对应。

高速模式
    这个选项是为了解决分析比较大的FLV文件时,用户等待时间过长的问题。
    普通模式时,分析过程为阻塞模式,即主线程分析完毕后刷新界面,用户才可以继续操作。
    高速模式时,为非阻塞模式,主线程分析一小部分后立即返回刷新界面,响应用户操作;另外一个线程会继续分析剩余大部分文件,直到分析完毕自动结束线程。因 此高速模式时,用户会看到结构树的滚动条一直在滑动,这是因为后台分析线程在不断向结构树里添加子项。需要注意的是,当后台分析线程还没有结束,如果用户 打开新的文件进行分析,有可能出现错误的分析结果。这个目前没有进行测试,我想应该是这样的。
    这里需要提一下,其实真正分析文件的时间并不会特别长,即使几百兆的文件,几十秒内应该没有问题,时间主要消耗在MFC的树型控件CTreeCtrl上。 为了开发效率,FLVParse使用了MFC控件,但是CTreeCtrl在结构比较复杂,子项比较多的时候,效率会出现比较大的下降。当子项超过 10000的时候,再进行添加的时间大大变长,几乎到了无法忍受的程度,好在还算稳定,没有出现崩溃等现象。粗略估计,每次分析文件,花在更新UI界面上 的时间要占总耗时的90%以上,而且对于越大的文件这个比例占的越大。

分析耗时
    耗时包括分析文件结构耗时和更新UI界面耗时两部分,每次分析完毕都会显示结果。大家还可以根据进度条来估算分析需要等待的时间。

FLVParse一般的操作步骤为:

选择结构信息等级 --> 根据文件大小选择是否“高速模式” --> 点击“浏览”选择要分析的文件 --> 分析完毕后选中结构树中某项 --> 查看数据区对应该项的字节数据(或通过滚动条查看某位置字节数据)

注意事项:
1、每次改变信息等级后,要重新打开一次文件,目前不支持动态更新,以后有机会完善此功能;
2、5个等级的信息对于分析时间的区分还是比较明显的,建议大家每次分析之前选择合适的等级;
3、FLVParse默认FLV文件只有一个Metadata Tag,如果有多个的话,后面的会略过;
4、FLVParse对于Metadata子项的分析,目前只支持DOUBLE,BOOL和STRING三种类型,遇到其他类型,则会将该项与其后的项都忽略,因此有可能出现metadata的array size与实际显示的不相符的情况;
5、对于比较大的文件(10M以上),建议大家选择高速模式,否则等待的过程将很漫长,而且要注意下一次分析时确保上一次分析已经结束;
6、对于metadata的分析部分,可能还有一些bug,但不影响其他Tag的分析,经简单测试,该工具对FLV结构的分析是比较准确的,大家可以放心使用;

分析flv文件的信息相关推荐

  1. 分析FLV文件分析和解析器的开源代码

    分析一下GitHub上一份FLV文件分析和解析器的开源代码 GitHub源码地址:功能强大的 FLV 文件分析和解析器 :可以将flv文件的视频tag中的h264类型数据和音频tag中的aac类型数据 ...

  2. flv文件元信息(metadata)

    flv 元信息(metadata) flv文件中的元信息,是一些描述flv文件各类属性的信息.这些信息以AMF格式保存在文件的起始部分.adobe官方的标准flv元信息项目如下(来源:http://h ...

  3. FLV文件(H264 + AAC)格式超详细分析

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

  4. 从flv文件中提取音频并存储为mp3格式

    在优酷上下载了一些教学视频,为了把它们放到mp3里面,需要从这些flv文件中提取出音频数据并存储为mp3格式. 操作系统是centos 5.3. 在网上搜索了一下,找到以下方法: 方法一:使用menc ...

  5. 动态播放外部FLV 文件和预加载 FLV 文件

    /***************** wgscd (c)2005 ' qq:153964481 e-mail:wgscd@126.com  blog:http://blog.csdn.net/wgsn ...

  6. php获取视频文件属性,使用php获取flv视频文件的信息

    最近要做一个判断flv文件信息的程序,使用php对flv文件进行解析判断,百度了半天也没有对应的信息,后来又去csdn发帖子,得到的答复是目前还没有直接可以对flv文件进行处理的方法,于是决定放弃这个 ...

  7. GameFramework:资源热更代码分析,检查版本信息,下载版本文件,校验版本文件,得到更新文件数量,下载文件,TaskPool

    资源下载流程图 流程跳转的日志 版本信息-版本检测-下载版本列表-下载散文件代码分析 进入ProcedureCheckVersion.OnEnter流程,进行task请求,userData为StarF ...

  8. 爬取B站视频 - m4s与flv文件的那些事

    参考链接 使用 Python 爬取 B 站视频 爬取B站视频 目录 1. 前言说明 2. 自动化分析 3. 爬取单个视频 4. 批量爬取视频 5. 总结 一.前言说明 ↶ 前言 每次查找资料和研究总是 ...

  9. 从flv文件中提取h264码流(使用av_bsf_send_packet和av_bsf_receive_packet)

    最近在学习音视频开发,需要开发一个从flv文件中提取h264码流的demo. 具体的原理,在雷神的文章中写的很清楚了: https://blog.csdn.net/leixiaohua1020/art ...

最新文章

  1. gitee markdown 笔记_picGo+github+坚果云打造自己的云笔记
  2. python_day9线程、进程和协程
  3. 推荐一个非常火爆的电商开源项目!
  4. 解决 项目cocoapods diff: /../Podfile.lock: No such file or directory
  5. mysql error 变量_mysql 变量问题
  6. itext html 转换 pdf文件,利用itext实现html转pdf文档
  7. 二叉树之孩子表示法以及前中后三种遍历法
  8. python setdefault函数_Python字典(Dictionary)setdefault()函数理解
  9. MySQL内存----使用说明全局缓存+线程缓存) 转
  10. java自动化学习笔记
  11. ADAMS2017AMESim2016联合仿真 设置教程及注意事项
  12. HTML鼠标移到a上面让a变色
  13. 解决:本地计算机无法复制文件到远程计算机
  14. Eclipse的Maven创建
  15. FPGA数字信号处理之乘法器
  16. 计算机软件在生物学应用,计算机辅助教学软件在生物教学中的应用
  17. 郭逸淵:4月7日比特幣(BTC)以太坊(ETH)行情分析及布局思路
  18. 大数据项目篇--电商用户画像
  19. Buuctf Knife
  20. 对计算机会计上机课的心得,会计电算化的心得体会

热门文章

  1. Mozilla宣布关闭 Persona
  2. oracle扩展dblink数。
  3. 程序员应该遵守的编程原则
  4. Cocoa的MVC架构分析 cocoa的mvc实现
  5. 位图排序(计数排序)
  6. Rails安全导读【完】
  7. CodeForces - 1285E Delete a Segmen(线段树+区间合并+离散化)
  8. 邮局--dp经典问题
  9. 高性能服务器开发-iocp
  10. Python中变量的作用域?(变量查找顺序)