前端读取wma文件头获取音频时长

视频文件头解析--wmv-解析流程 1、第一层,Header Object,这个结构一般不解析。没什么用。跳过这30字节的结构 2、第二层,File Properties Object 、Header ExtensionObject和Stream Properties Object,前两个也没解析,直接跳过了。Header Object是一个容器,它里面必须包含一个File PropertiesObject, 一个Header E 阅读详情

背景:wma是微软推出的一种音频存储格式,由于版权问题,目前浏览器的audio/vedio标签都不支持播放wma文件,由于项目需求需要前端读取本地音频时长等相关信息传到后端,所以只能另辟蹊径。

思路:读取音频文件二进制数据,根据头文件解析相关信息

下图位通过windows media 工具来读取wma文件,进行分析

经过多个文件对比分析,得出如下结果

  1. 头对象由多个部分组成
  2. 不同文件头部大小不一样,组成部分个数也不一样
  3. 每个部分的排列顺序可能不一样
  4. 文件属性内容固定,Object ID都一样(文件时长相关信息在此)
  5. 前三十个字节固定,16个字节标识这个wma文件,然后8字节存储头文件大小,4个字节存储头组成部分个数,然后两个保留字节

根据上面的分析,我们只要拿到文件属性这个部分,就可以读出文件时长,文件属性内容如下:

1.截取0-16个字节,判断是否为wma文件

2.获取16-24个字节,判断wma文件头部大小

3.根据第二步获取的头部大小截取头部

4.从第30开始,取第一个头部对象的id,为前16个字节

5.判断id是否为文件属性id

6.如果不是,则取后面8个字节,获取当前头部大小

7.偏移30 + 当前头部大小,获取下一个头部组成部分

8.重复第四步


        
C# 获取MP3/WMA音频数据信息 场景: 在在做音乐播放器时,要获取音乐文件的信息,下面的方法就是获取音乐文件的信息 /// <summary> /// 歌曲信息 /// </summary> public struct MusicInfo { /// <summary> /// 歌手名 /// </summary> public string name; 阅读详情

相关推荐

在网页中用AS调用JS播放WMA音乐

大家知道FLASH是播放不了WMA格式的文件的,这个本质上是用浏览器播放的。

HTML插入音频和视频:audio和video标签及其属性

一、上传到第三方网站,然后引入例如视频上传到优酷网,然后得到代码 <iframe height=498 width=510 src='http://player.youku.com/embed/XMTg1MjAzMTUwMA==' frameborder=0 'allowfullscreen'></iframe> 二、audio 标签定义声音,比如音乐或其他...

weixin_30817749的博客 1813

java源码 java获取音频文件 播放时长AudioDemo 2018127

java源码 java获取音频文件 播放时长AudioDemo .

读取wmv文件时长信息

以前没有做过这方面的。最单纯的目的只是要获得wmv文件的时长信息。如果研究wmv文件格式然后自己写程序来读取的话,可能是相当费劲的,不值得。研究了一下WindowsMediaPlayer,发现了一个简单的方法。下面的是简单的C#代码。WMPLib.WindowsMediaPlayerClass w;w = new WMPLIB.WindowsMediaPlayerClass();WMPLib.

RandomLife's Home 3086

html 直接播放wma,网页中插入音乐播放器WMA 方法有两种:object和embed

网页中插入音乐播放器(详细,全面,加图)通常有三种方法,使用普通的html方法有两种:object和embed。另一种是用flash编写的播放器,这种方法兼容性级好,但难度较大,较复杂。其中object是ie专用,有大量属性可定制,firefox,谷歌,opera都不支持。embeb较为通用,以上浏览器都行,只是属性较少,界面不如object来的丰富。object方法:界面:另一种方法,时间和信息...

weixin_32968239的博客 1800

java播放wma格式的音频文件,在java中播放Windows媒体音频文件(.wma

how to read .wma song file in java. I''m using this code. but this code is error.(Error == javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file )private ...

weixin_30000735的博客 341

web前端-纯前端音频剪辑,vue音频编辑组件

本文包含内容概述: - 整理总结的音频相关资料 - 音频相关jsapi说明及示例 - vue编写的组件及git项目地址

夜雨风亭 7388

如何获音视频文件的时长

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34318272的博客 130

java获取声音_Java获取音频播放时长

1. 获取.amr音频文件播放时长import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;public class AmrFileTimeLengthSample {public static long getAmrDuration(File file) throws IOException {l...

weixin_33997566的博客 412

WMA文件头解析

wma是微软定义的一种媒体文件格式,它是一种流媒体,由于wma协议是不公开的所以我们就只能通过大量的文件来做分析,简单的分析网上一般都可以找到,下边我就引用别人的一些: ASF文件和WMA文件格式差不多。具体请看下面我写的代码。文件分析根据mplayer其中的asfhead.c提供的代码进行分析。mplayer只解除出了标准的wma头信息,其扩展信息并没有解析出来。代码如下. /* 每一

allen6268198的专栏 1728

FFMPEG常用命令(一):音视频信息与抽取

介绍与准备 FFmpeg是一个强大的音视频编解码开源库。目前(2022/2/9)FFmpeg版本已经到了4+,支持多种平台。下面我们来学习一下FFmpeg的常用命令。 在学习之前要做一些准备工作,首先是安装FFmpeg,这里的运行环境是Windows。 其次是准备好一个视频文件(mp4)和一个音频文件(mp3),用于音视频的编解码测试。测试用的MP4可以在这个页面下载。 创建一个文件夹叫Res,把测试文件放在这里,分别命名video.mp4、audio.mp3。 最后在这个文件夹下打开命令行,准备工作就完

PYJTLK的博客 3588

对Html5 audio标签的解析格式的一点坑的记录

其中acc格式会导致js中的currentime的错误解析,而m4a中其实又分为两种不同的编码ACC和ALAC其中alac格式的音频质量高但是audio好像并不能解析这个格式而ACC是可以的,MP3比ACC的质量更差,而WAV质量比ALAC略低但是能很好的契合这个标签。我在使用audio标签时采用了分别使用了以下几种文件格式的音频acc,m4a,wav,mp3。ps:以下其他格式都是使用格式工厂转换之后的格式原格式为acc。

qq_74073407的博客 332

得到一个wma或mp3文件,如何用最简单的方法得到它的长度信息呢?

得到一个wma或mp3文件,如何用最简单的方法得到它的长度信息呢? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiMultimedia/html/delphi_20061108195617169.html 不需要知道歌手名专辑名等,只要长度即可,哪个指令可以做到呢?请给一点代码,万分感谢帮忙的兄弟! uses ...

aibi9196的博客 152

视频播放器的html代码(二)

网页播放器的参数含义 Windows Media Player 网页播放器 参数含义 AllowChangeDisplaySize 返回或设置最终用户是否能设置显示尺寸(逻辑型)AllowScan 返回或设置是否允许扫描(逻辑型)AnimationAtStart 返回或设置控件开始播放之前是否先播放一个动画序列(逻辑型)AudioStream 返回或设置音频流的编号(用于多音频流的剪辑,默认为

wygyhm的专栏 5404

JS纯前端实现audio音频剪裁剪切复制播放与上传

背景是这样的,用户上传音频文件,可能只需要几十秒就够了,但是常规的音乐都要3~5分钟,80%的流量都是不需要的,要是就这么传上去,其实是流量的浪费,如果可以在前端就进行剪裁,也就是只取前面一段时间的音频,岂不是可以给公司省很多流量费用,前端的业务价值就体现了。 关键如何实现呢? 下面,就以“截取用户上传音频前3秒内容”的需求示意下如何借助Web Audio API实现音频的部分复制与播放功能。 一、不哔哔,直接正题 实现步骤如下。 1. File对象转ArrayBuffer 在Web网页中,用户选择的文件是

weixin_48726650的博客 3547

比较不错的JS视频代码,简单灵巧

持的音视频格式: .swf、.wmv、.asf、.wma、.mp3、.asx、.mid、.midi、.rm、.ra、.rmvb、.mp4、.mov、.avi、.wav、.ram、.mpg、.mpeg、flv; 使用方法: 步骤1:网站中引用video.js文件(src路径根据网站实际情况自行修改) ...

weixin_33863087的博客 414

html+js实现音频上传并能播放(支持多个文件上传)

前端实现音频上传并能播放(支持多个文件上传) html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <input type="file" id="fi...

qq_22669967的博客 7468
上一篇: Unicode字符集与utf-8编码
下一篇: flex布局之成员属性flex
feral_coder
博客等级 码龄9年 19粉丝 80原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值