flv切割工具

    原本只是想找个命令行下运行的flv视频切割工具,用于将大的视频文件切割成若干个小文件。结果在网上搜了半天,找到的全是窗口程序。不过,却意外地发现,flv视频的格式非常整齐,所以最终花了两天自己实现了这个小工具。
先介绍下flv的格式:
flv文件是个二进制文件,由 一个文件头(flv header)和许多个tag块(统一叫flv body)组成。
*********
1.文件头(flv header),通常是9个字节,主要就是用于表示文件是flv格式,没有什么有价值的信息。具体格式:
格式名称      长度      说明
文件类型      3字节     就是一个ascll编码的"FLV"字符串。
版本          1字节     一般是0x01,表示flv version是 1
流信息        1字节     倒数第一位是1表示有视频,倒数第三位是1表示有音频。其余位通常是0
header长度    4字节     保存整个文件头的长度。一般是9。
扩展信息      不确定     一般都没有扩展信息;如果有,其长度可以从"header长度"里计算出来
                        了。实际看了好几个视频,都没有这一信息。
*********
2.flv body。也就是flv的主体,这只是个概念,用来统称除掉flv header之外的部分,即一系列的tag。每个tag的格式都是固定,具体参考下面。
*********
3.tag。flv里面 的实体就是tag了。每个tag都可以分为两部分,第一部分包含是tag 类型信息,长度固定为15字节;第二部分为tag data,也就是flv的数据(有音频,视频,脚本等三类数据),其长度由第一部分的特定位给出。具体格式及其含义如下:
上一个tag的长度  4个字节 这个长度包括了tag的两个部分,对于第一帧这个值为0。主要用于从文件尾逆向处理每 帧。所以在最后一帧 (tag)的后面会有一个previoustagsize(上一帧长度),才是文件 结束,要注意这点。
tag种类      1字节      标志这个tag的种类。8是音频,9是视频,18是脚本。目前只有这三类tag。
data域长度   3字节      指出tag data(上面提到的第二部分)的总长度。
时间戳       3字节      此tag的时间戳。整数,单位是毫秒。对于脚本型的tag,这个字段总是0。
时间戳扩展位  1字节     用于把时间戳扩展为4字节(3+1),目前看来用不了这么长的时间戳,我估算了一下,3 字节能表示大约4.6个小时的长度,4字节能表示74小时,普通flv文件的时间长度都不 太可能超过4.6个小时了,所以这个字段一般也是全0了
流ID          3字节    全0。英文是StreamID,没有找到更多的说明信息了,可以认为是保留位吧。
Data       由上面指出  flv的数据区。长度在"data域长度"给出。

到这里,flv的格式没有具体说明的就是tag中的data域,不过这个域的长度我们已经可以获得。切割时先拷贝flv header,然后一个一个地拷贝tag。计算好已经拷贝的总大小(或是时间长度),很容易就能按大小(或是时间长度)切割出文件来。当然,tag data域里有些信息我们可能是感兴趣的,比如一个视频的tag是不是关键帧。这就需要区解读data域。切割的时候,还要注意修改每帧的时间戳(每个文件的第一帧都应该从0开始)。flv文件的第一帧往往是被称为metadata 的脚本tag,在这个tag里有整个flv的时长(由一个duration的字符串跟着64位的dobule值,单位是秒),播放器会去读取这个数据,所以切割的时候也要保证这个数据的正确性。flv里的数据多数是按网络序存储在文件中的,读到本机处理前要逆序,处理后也要逆序再存回去。不做详细分析了,可以参考官方的文档《video_file_format_spec_v9》。 细心决定成败。
参考文献:(网页有可能过期)
http://noahgenius.javaeye.com/blog/164782
官方文档《video_file_format_spec_v9》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
FLV转RTMP开发调试工具,是一种帮助开发人员进行FLV(Flash Video)文件转换为RTMP(Real-Time Messaging Protocol)流媒体协议的工具。 首先,这种工具可以提供一个用户友好的界面,使开发人员能够轻松地进行配置和操作。它应具备直观的用户界面,以便用户可以轻松理解它的功能和选项。 其次,该工具应该提供FLV到RTMP的转换功能。开发人员可以将FLV文件导入到工具中,然后选择适当的设置来将其转换为RTMP流媒体格式。这样,开发人员可以使用RTMP协议来传输和播放视频内容。 除了转换功能外,这种工具还应该提供调试功能。开发人员可以在转换过程中监视和分析数据,以确保转换过程正常进行。这可以通过显示转换进度、当前转换的帧率、转换后的视频质量等方式实现。 此外,该工具还应该具备错误处理和日志记录功能。当转换过程中遇到错误或问题时,它应该能够提供有关错误的详细信息,并记录在日志文件中,以便开发人员可以分析和解决问题。 最后,该工具还可以提供高级功能,如批量转换、转换后的视频编辑和处理等。这些功能可以进一步增强开发人员的使用体验,并提供更多的选择和灵活性。 总之,FLV转RTMP开发调试工具是一种帮助开发者将FLV文件转换为RTMP流媒体格式的工具。它应具备用户友好的界面、转换功能、调试功能、错误处理和日志记录功能,并可提供高级功能来提升开发体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值