背景:wma是微软推出的一种音频存储格式,由于版权问题,目前浏览器的audio/vedio标签都不支持播放wma文件,由于项目需求需要前端读取本地音频时长等相关信息传到后端,所以只能另辟蹊径。
思路:读取音频文件二进制数据,根据头文件解析相关信息
下图位通过windows media 工具来读取wma文件,进行分析
经过多个文件对比分析,得出如下结果
- 头对象由多个部分组成
- 不同文件头部大小不一样,组成部分个数也不一样
- 每个部分的排列顺序可能不一样
- 文件属性内容固定,Object ID都一样(文件时长相关信息在此)
- 前三十个字节固定,16个字节标识这个wma文件,然后8字节存储头文件大小,4个字节存储头组成部分个数,然后两个保留字节
根据上面的分析,我们只要拿到文件属性这个部分,就可以读出文件时长,文件属性内容如下:
1.截取0-16个字节,判断是否为wma文件
2.获取16-24个字节,判断wma文件头部大小
3.根据第二步获取的头部大小截取头部
4.从第30开始,取第一个头部对象的id,为前