wma是微软定义的一种媒体文件格式,它是一种流媒体,由于wma协议是不公开的所以我们就只能通过大量的文件来做分析,简单的分析网上一般都可以找到,下边我就引用别人的一些:

ASF文件和WMA文件格式差不多。具体请看下面我写的代码。文件分析根据mplayer其中的asfhead.c提供的代码进行分析。mplayer只解除出了标准的wma头信息,其扩展信息并没有解析出来。代码如下.

/*
每一个WMA文件,它的头16个字节是固定的,为十六进制的“30 26 B2 75 8E 66 CF 11 A 6 D9 00 AA 00 62 CE 6C ”,用来标识这个是否为WMA文件。接下来的8个字节为一个整数,表示整个WMA文件头部的大小,这个头部里面包含了Tag信息等所有非音频信息,头部后面的是音频信息,我们在这里就不深入了解了。那个整数接下来的6个字节还没搞清楚是什么用的,不过不影响我们对Tag信息的读写。

也就是说从文件开始偏移量为31开始,里面存放了很多帧,有我们需要的标准Tag信息,扩展Tag信息,WMA文件控制信息等等。每个帧不是等长的,但是帧头是固定的24个字节,其中前16字节是用来标识这个帧的名字,后8个字节是用来表示这个帧(包括帧头)的大小。这一点和MP3文件的ID3V2信息比较像。

由于我们只需要读写Tag信息,而Tag信息又分别保存在两个帧里,分别为标准Tag帧和扩展Tag帧,所有我们只需要处理这两个帧,其他帧完全可以根据获得的帧长度来跳过。

如图2,标准Tag帧只包含歌曲标题,艺术家,版权,备注四个内容。它的帧名是十六进制的“33 26 B2 75 8E 66 CF 11 A 6 D9 00 AA 00 62 CE 6C ”,在24个字节的帧头后紧跟着5个分别为2个字节的整数,前四个分别表示歌曲标题,艺术家,版权,备注的大小,第五个还不清楚是什么用的,大部分情况下是不使用的,即它的大小为0的。

在这10个字节后,这四个信息的内容就按顺序存放了。记住,在WMA文件里,所有的文字都是按Unicode宽字符的编码方式储存的,而且每个字符串后面都又一个0结束字符的。

再看扩展Tag帧,这里就比较麻烦了,里面包含的信息的个数是不确定的,每个信息也是按照像帧一样的方式组织起来的。扩展Tag帧的帧名是十六进制的“ 40 A 4 D0 D2 07 E3 D2 11 97 F 0 00 A 0 C 9 5E A8 50” ,在24字节的帧头后先有一个两个字节的整数表示这个帧里一共有的扩展信息个数(ExNo)。

每一个扩展信息包含扩展信息名字和对应的值。先有一个两个字节的整数来表示扩展名字信息的大小,接着是扩展信息,然后有一个两个字节的整数标志(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格式文件头解析相关推荐

  1. 记:ELF文件解析初定义——文件头解析

    0x00 概论 因为TI的DSP输出文件与传统的ELF文件不符,所以本人就顺道研究了一下现在的ELF的文件格式. 会将其陆续完成在文章中. 阅读本文之前,您需要掌握的技能有: 技能名称 技能熟练度 技 ...

  2. 视频文件头解析--wma

    wma文件结构示意图 格式的简单说明: 如图1,每一个WMA文件,它的头16个字节是固定的,为十六进制的"30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 ...

  3. 视频文件头解析--mkv

    MKV 的文件格式的目标是,成为多媒休包容格式的标准.它基于EBML(扩展二进制多媒体语言).与XML标记语言有点相似. EBML是类似于XML那样的层次化结构,每一个元素都有它的ID(就是元素名)和 ...

  4. 视频文件头解析--wmv-浅析

    WMV格式浅析 WMV,全称Windows Media Video,是微软为其开发的若干音视频编解码器推出的视频压缩文件格式.WMV,也是一种编解码器,最早 设计用于互联网流媒体应用,主要针对的竞争对 ...

  5. swf文件格式解析入门(文件头解析)

    这里是使用as3语言来对swf文件做解析,其它语言可以参考. 一,准备工作 从Adobe官网下载一份swf文件格式说明文档 http://www.adobe.com/content/dam/Adobe ...

  6. 视频文件头解析之---avi

    AVI格式是音频视频交错(Audio VideoInterleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Vid ...

  7. 视频文件头解析--mpeg-个人对mpg文件结构的理解

    1.一个mpg文件可以只包含视频内容,那么文件开头以0x000001B3作为起始码 2.以0x000001BA 开头,就意味着同时包含音频数据和视频数据,如果没有音频数据,则以0x000001B3开头 ...

  8. 视频文件头解析--MP4-综述

    MP4 文件格式 综述 关键概念 MP4 文件格式中,所有的内容存在一个称为movie 的容器中.一个movie 可以由多个tracks 组成.每个track 就是一个随时间变化的媒体序列,例如,视频 ...

  9. .bmp图片的文件头解析

    BMP文件完全解析 一副平面图像,最终呈现的是一个彩色的二维矩阵,三基色的组合构成了几乎肉眼可见的所有色彩,为了显示彩色矩阵,使用高密度排列的RGB彩色像素组成的屏幕来显示,因此处理器需要知道每一个像 ...

最新文章

  1. 中国人必须知道的76个常识。。。看了才发现,自己知道的实在太少了。。。学习。。。。...
  2. LaTeX文档插入图片的几种常用方法
  3. 48个越吃越瘦的诀窍 - 生活至上,美容至尚!
  4. iview在项目中遇到的坑
  5. 《UNIX网络编程 卷1》一、环境配置
  6. 【Tensorflow教程笔记】TensorFlow Serving
  7. linux中swp是什么文件,Linux中.swp 文件的产生与解决方法
  8. 中国游客是否可以持中国驾照在美国自驾游?_游侠_新浪博客
  9. 管理员同志,回收站博文希望得到恢复,万分感谢
  10. 周文上海大学计算机学院,上海大学计算机工程与科学学院硕士生导师周文
  11. 小升初数学知识体系梳理
  12. html a标签发微信,a标签的特殊和文本的样式
  13. 电影票房多视图可视化(echarts)
  14. 关于wifi portal认证--为浏览器添加wifi认证功能
  15. [分块] 分块入门1~4
  16. ?nocache=+new Date().getTime();中的nocache是什么意思
  17. ZeroTier-One配置moon心得
  18. Visual Studio 2019 安卓开发(一)
  19. 网络共享 指定的服务器无法运行请求的操作,局域网共享访问故障及解决方案...
  20. 基于SECS协议开发的简明教程(5)

热门文章

  1. 在Windows 7、8、10、11中恢复Word文件的简单方法
  2. Libpcap和Qt的安装及数据包抓包、过滤、保存
  3. 无痕埋点的设计与实现
  4. 公共云和私有云相比,主要包含哪些特点?
  5. 2021肖秀荣基础班
  6. 2016外省人在上海办护照,港澳台通行证详细指南
  7. ISTA-NAS: Efficient and Consistent Neural Architecture Search by Sparse Coding
  8. linux的nohup disown setsid screen
  9. 【LeetCode】735. 行星碰撞
  10. 起初学习简单练习,有关整数的求和,求偶,求奇,求素数.