易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

解析FLV获取网络视频时长   [复制链接]

    2022-10-18 09:00:02
    网络相关源码
    易语言资源网
    2440 次浏览
    来源链接

1.在问答区看到一篇帖子  获取flv网络视频时长

问答贴: https://bbs.125.la/thread-14749691-1-1.html

论坛中只有MP4的时长获取

也有通过读取前几百个字节 再使用ffmpeg来获取时长  虽然也能达到目的  但还需要带个ffmpeg 就很不方便

遂通过解析flv协yi 了解组成部分后成功获取时长 下面分享一下过程

2.flv格式解析

网上有很多关于flv格式解析的博客 可自行翻阅  下面列出本贴需要的部分

onMetaData

onMetaData中包含了音视频相关的元数据,封装在Script Data Tag中,它包含了两个AMF。

第一个AMF:

  • 第1个字节:0x02,表示字符串类型
  • 第2-3个字节:UI16类型,值为0x000A,表示字符串的长度为10(onMetaData的长度);
  • 第4-13个字节:字符串onMetaData对应的16进制数字(0x6F 0x6E 0x4D 0x65 0x74 0x61 0x44 0x61 0x74 0x61);

第二个AMF:

  • 第1个字节:0x08,表示数组类型;
  • 第2-5个字节:UI32类型,表示数组的长度,onMetaData中具体包含哪些属性是不固定的。
  • 第6个字节+:比如duration,则:
    • 第6-9个字节:0x0008,表示长度为8个字节;
    • 第10-17个字节:0x6475 7261 7469,表示 duration 这个字符串;
    • 第18个字节:0x00,表示为数值类型;
    • 第19-26个字节:0x...,表示具体的时长;

更多onMetaData字段的定义:

字段字段类型字段含义
durationDOUBLE文件的时长
widthDOUBLE视频宽度(px)
heightDOUBLE视频高度(px)
videodatarateDOUBLE视频比特率(kb/s)
framerateDOUBLE视频帧率(帧/s)
videocodecidDOUBLE视频编解码器ID(参考Video Tag)
audiosamplerateDOUBLE音频采样率
audiosamplesizeDOUBLE音频采样精度(参考Audio Tag)
stereoBOOL是否立体声
audiocodecidDOUBLE音频编解码器ID(参考Audio Tag)
filesizeDOUBLE文件总得大小(字节)

00 08 64 75 72 61 74 69 6F 6E 00 40 A7 5D 1E B8 51 EB 85

08表示8个字节  

64 75 72 61 74 69 6F 6E 表示duration文字

上面选中部分则就是具体的时长   

由于 duration 是双浮点数据类型

所以要将这个十六进制转成双浮点即可获取正确的时长

十六进制转双浮点 参考帖子: https://bbs.125.la/forum.php?mod=redirect&goto=findpost&ptid=14699389&pid=22022452

解析部分参考博客: https://www.cnblogs.com/chyingp/p/flv-getting-started.html

3.易语言代码实现

源码很简单  大佬勿喷   调用了精易模块  自行引用即可   希望本贴能帮助到你们



点我下载 (已有 44 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
获取网络flv时长.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:多线程多任务演示,涉及自定义数据类型/超...     下一篇:Exdui4.1月历框扩展修改版...