WMA格式文件头解析
来源:互联网 发布:2015年贵州省旅游数据 编辑:程序博客网 时间:2024/05/20 11:53
wma是微软定义的一种媒体文件格式,它是一种流媒体,由于wma协议是不公开的所以我们就只能通过大量的文件来做分析,简单的分析网上一般都可以找到,下边我就引用别人的一些:
ASF文件和WMA文件格式差不多。具体请看下面我写的代码。文件分析根据mplayer其中的asfhead.c提供的代码进行分析。mplayer只解除出了标准的wma头信息,其扩展信息并没有解析出来。代码如下.
/*
每一个WMA文件,它的头16个字节是固定的,为十六进制的“30 26 B2 75 8E 66 CF
也就是说从文件开始偏移量为31开始,里面存放了很多帧,有我们需要的标准Tag信息,扩展Tag信息,WMA文件控制信息等等。每个帧不是等长的,但是帧头是固定的24个字节,其中前16字节是用来标识这个帧的名字,后8个字节是用来表示这个帧(包括帧头)的大小。这一点和MP3文件的ID3V2信息比较像。
由于我们只需要读写Tag信息,而Tag信息又分别保存在两个帧里,分别为标准Tag帧和扩展Tag帧,所有我们只需要处理这两个帧,其他帧完全可以根据获得的帧长度来跳过。
如图2,标准Tag帧只包含歌曲标题,艺术家,版权,备注四个内容。它的帧名是十六进制的“33 26 B2 75 8E 66 CF
在这10个字节后,这四个信息的内容就按顺序存放了。记住,在WMA文件里,所有的文字都是按Unicode宽字符的编码方式储存的,而且每个字符串后面都又一个0结束字符的。
再看扩展Tag帧,这里就比较麻烦了,里面包含的信息的个数是不确定的,每个信息也是按照像帧一样的方式组织起来的。扩展Tag帧的帧名是十六进制的“
每一个扩展信息包含扩展信息名字和对应的值。先有一个两个字节的整数来表示扩展名字信息的大小,接着是扩展信息,然后有一个两个字节的整数标志(Flag),这个后面再讲。然后又是一个两个字节的整数,表示值的大小。接着就是这个值。
当扩展信息名字为WMFSDKVersion时,这个值表示的是这个WMA文件的版本;当扩展信息名字为WM/AlbumTitle时,这个值代表的就是专辑名;当扩展信息名字为WM/Genre时,这个值代表的就是流派;同理,很容易从扩展信息的名字看出这个值的用途的。这些扩展信息的名字和值几乎都是用Unicode的字符串来存储的,到现在为止只发现对下面两个情况例外
下面再来看看那个标志Flag,这个基本上是为没什么用的(通常值为0),只对WM/TrackNumber和WM/Track这两个扩展信息名字有用,当Flag为3的时候后面的值(也就是曲目信息)是以4个字节的整数的形式表示,当Flag为0的时候,曲目信息是以普通的字符串形式表示的。
一般的都是这个样子的,但是wma有很多版本,只能说在测试的过程中遇到了做一下处理.
我主要说的是关于写wma的头,写文件当然要保证文件不被改变,如果一点些不对都会导致文件不能播放,这是很让人郁闷的,我就遇到过,怎么改也无法让它播放.一般情况下不要去改变文件的头,在wma的头部一般都会加上很多的0字节的字符,可以就是为了修改吧.我们称它为padding值.它一般以:0x74, 0xD4, 0x06, 0x18, 0xDF, 0xCA, 0x09, 0x45,
0xA4, 0xBA, 0x9A, 0xAB, 0xCB, 0x96, 0xAA, 0xE8表示pading帧
有兴趣的可以对此做一个分析.
有空我再写
- WMA格式文件头解析
- WMA文件头解析
- 视频文件头解析--wma
- WMA格式文件中的TAG信息格式及解析类
- WMA 文件格式解析
- wma文件解析
- 关于wma头(续)
- WMA文件的文件头结构
- WMA文件的文件头结构
- C# 解析 PE格式文件
- CSV格式文件解析
- java解析json格式文件
- 3GP格式文件解析
- CSV格式文件解析
- Dicom格式文件解析器
- java解析json格式文件
- off格式文件解析
- Dicom格式文件解析器
- 3GP概述
- 怎么强制弹出窗口永远在最前面
- 从Win32 Application开始学MFC可以事半功倍
- js 问题
- [转]如何学习《离散数学》
- WMA格式文件头解析
- 缓解VSS共享文件夹的安全隐患问题
- Excel与VBA编程中的常用代码
- 如何调用Eclipse CDT解析器的结果实现对C++代码的解析
- OCC开发使用技巧两则
- VBA 和 Windows API
- 并查集的两种实现
- asp.net中ajax使用(客户端调用服务端方法)
- SQL Server 2000 基础(1)——安装