如何用二进制读取MPEG文件?

gdcola 2003-08-11 09:41:32
打开MPEG文件,搜索视频流数据,统计位串并1011 0001 0000 0000 0000 0000 0000出现的次数
...全文
29 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
W32API 2003-08-13
  • 打赏
  • 举报
回复
唉,你找个十六进制编辑软件一般都可做这个查找。比如 WinHex
W32API 2003-08-12
  • 打赏
  • 举报
回复
打开文件会不会?
字符串比较会不会?
解析MP3音频格式 一、概述 MP3 文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3 的全称应为MPEG1 Layer-3 音频文件MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG 音频文件MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即 Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层 次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和 6:1-8:1,而MP3 的压缩率则高达10:1-12:1,也就是说,一分钟CD 音质的音乐,未经压缩需要10MB的存储空间,而经过MP3 压缩编码后只有1MB 左右。不过MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。 名词解释: 比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,传送的数据越大。 比特率比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。比特率与音、视频压缩的关系,简单的说就是比特率越高,音、视频的质量就越好,但编码后的文件就越大;如果比特率越少则情况刚好相反。 采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,单位用赫兹(Hz)来表示。采样频率的倒数是采样周期(也称为采样时间),它表示采样之间的时间间隔。这里要注意不要将采样率与位速相混淆。 二、MP3文件整体结构 MP3文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1) ID3V2标签帧 ID3v2在文件头,以字符串“ID3”为标志,包含了演唱者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。 音频数据帧 一系列的帧,个数由文件大小和帧长决定,每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定,每个FRAME又分为帧头和数据实体两部分,帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立 ID3V1标签帧 ID3v1在文件结尾,以字符串“TAG”为标记,其长度是固定的128个字节,包含了演唱者、歌名、专辑、年份等信息。 三、MP3结构具体分析 1.ID3V2标签 每个ID3V2.3 的标签都一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。 标签头 在文件的首部顺序记录10 个字节的ID3V2.3 的头部。数据结构如下: char Header[3]; /*必须为"ID3"否则认为标签不存在*/ char Ver; /*版本号ID3V2.3 就记录3*/ char Revision; /*副版本号此版本记录为0*/ char Flag; /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/ char Size[4]; /*标签大小,包括标签头的10 个字节和所有的标签帧的大小*/ 注:最后4个字节表示ID3V2标签的大小,在实际寻找首帧的过程中,我发现大部分的mp3文件的标签大小是包含标签头的,但有的又是不包含的,可能是某些mp3编码器写标签的BUG,所以为了兼容只好认为其是包含的,如果按大小找不到,再向后搜索,直到找到首帧为止。 计算ID3V2标签帧的大小: 最后四个字节表示,但每个字节只用7 位,最高位不使用恒为0。所以格式如下: 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 计算大小时要将0 去掉,得到一个28 位的二进制数,就是标签大小(不懂为什么要这样做),计算公式如 下: int ID3V2_Size; ID3V2_Size = (Size[0]&0x7F;)*0x200000 +(Size[1]&0x7F;)*0x4000 +(Size[2]&0x7F;)*0x80 +(Size[3]&0x7F;) (2) 标签帧 每个标签帧都有一个10 个字节的帧头和至少一个字节的不固定长度的内容组成。它们也是顺序存放在文件中,和标签头和其他的标签帧也没有特殊的字符分隔。得到一个完整的帧的内容只有从帧头中的到内容大小后才能读出,读取时要注意大小,不要将其他帧的内容或帧头读入。 一般我们从标签头中获取信息计算出整个ID3V2标签的大小即可,对于ID3V2的标签帧就不再仔细分析。 2.音频数据 数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。 (1)音频数据帧的帧头 格式如下: AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM 符号 长度(bit) 位置(bit) 描述 A 11 (31~21) 帧同步(所有位置1) B 2 (20~19) MPEG 音频版本ID 00 – MPEG 2.5 01 – 保留 10 – MPEG 2 (ISO/IEC 13818-3) 11 – MPEG 1 (ISO/IEC 11172-3) C 2 (18~17) Layer描述 00 - 保留 01 - Layer III 10 - Layer II 11 - Layer I D 1 (16) 校验位(0 - 紧跟帧头后有16位即2个字节用作CRC校验1 - 没有校验) E 4 (15~12) 比特率(位率)(见比特率索引表) F 2 (11~10) 采样率(见采样率索引表) G 1 (9) 填充位(填充用来达到正确的比特率。) 0 – 没有填充 1 – 填充了一个额外的空位 H 1 (8) 私有bit,可以用来做特殊应用。例如可以用来触发应用程序的特殊事件。 I 2 (7~6) 声道 00 立体声 01 联合立体声(立体声) 10 双声道(立体声) 11 单声道(单声) J 2 (5~4) 扩展模式(仅在联合立体声时有效) 扩展模式用来连接对立体声效果无用的信息,来减少所需的资源。这两个位在联合立体声模式下有编码器动态指定。 K 1 (3) 版权 0无版权 1有版权 L 1 (2) 原创 0 原创拷贝 1 原创 M 2 (1) 强调 00 - 无 01 - 50/15 ms 10 - 保留 11 - CCIT J.17 【帧头信息表】 索引值 MPEG1 MPEG2&MPEG2;.5 Layer1 Layer2 Layer3 Layer1 Layer2&3 0000 Free 0001 32 32 32 32 8 0010 64 48 40 48 16 0011 96 56 48 56 24 0100 128 64 56 64 32 0101 160 80 64 80 40 0110 192 96 80 96 48 0111 224 112 96 112 56 1000 256 128 112 128 64 1001 288 160 128 144 80 1010 320 192 160 160 96 1011 352 224 192 176 112 1100 384 256 224 192 128 1101 416 320 256 224 144 1110 448 384 320 256 160 1111 Bad 【比特率索引表】 Bits MPEG1 MPEG2 MPEG3 00 44100 22050 11025 01 48000 24000 12000 10 32000 16000 8000 11 保留 【采样率索引表】 (2)如何计算音频数据帧长度 我们首先区分两个术语:帧大小和帧长度。帧大小即每帧采样数表示一帧中采样的个数,这是恒定值。其值入下表所示 MPEG1 MPEG2 MPEG2.5 Layer1 384 384 384 Layer2 1152 1152 1152 Layer3 1152 576 576 【每帧采【每帧采样数表】 帧长度是压缩时每一帧的长度,包括帧头。它将填充的空位也计算在内。LayerI的一个空位长4字节,LayerII和LayerIII的空位是1字节。当读取MPEG文件时必须计算该值以便找到相邻的帧。 注意:因为有填充和比特率变换,帧长度可能变化。 从头中读取比特率,采样频率和填充, LyaerI使用公式: 帧长度(字节) = 每帧采样数 / 采样频率(HZ) * 比特率(bps)/ 8 +填充 * 4 LyerII和LyaerIII使用公式: 帧长度(字节)= 每帧采样数 / 采样频率(HZ) * 比特率(bps)/ 8 + 填充 例: LayerIII 比特率 128000,采样频率 44100,填充0 =〉帧大小 417字节 (3)计算每帧的持续时间 之前看了一些文章都说mp3的一帧的持续时间是26ms,结果在实际程序的编写中发现无法正确按时间定位到帧,然后又查了一些文章才知道,所谓26ms一帧只是针对MPEG1 Layer III而且采样率为44.1KHz来说是对的,但mp3文件并不都是如此,其实这个时间也是可以通过计算来获得,下面给出计算公式 每帧持续时间(秒) = 每帧采样数 / 采样频率(HZ) 可以这么理解:每帧采用数就是要采取的总数,采样率就是采取的速度,相除 就得到时间。 这样通过计算可知 MPEG1 Layer III 采样率为44.1KHz的一帧持续时间为26.12...不是整数,不过我们权且认为它就是26毫秒吧。 如果是MPEG2 Layer III 采样率为16KHz的话那一帧要持续36毫秒,这个相差还是蛮大的,所以还是应该通过计算来获的,当然可以按MPEG版本,层数和采样率来建一个表,这样直接查表就可以知道时间了。 3.ID3V1标签 ID3v1标签用来描述MPEG音频文件。包含艺术家,标题,唱片集,发布年代和流派。另外还有额外的注释空间。位于音频文件的最后固定为128字节。可以读取文件的最后这128字节获得标签。以最后128个字节的头三个字节为“TAG”作为有ID3V1的判断依据。 结构如下: AAABBBBB BBBBBBBB BBBBBBBB BBBBBBBB BCCCCCCC CCCCCCCC CCCCCCCC CCCCCCCD DDDDDDDD DDDDDDDD DDDDDDDD DDDDDEEE EFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFG 符号 长度(byte) 位置 描述 A 3 (0~2) 标签标志。如果存在标签并且正确的话,必须包含'TAG'。 B 30 (3~32) 标题 C 30 (33~62) 艺术家 D 30 (63~92) 唱片集 E 4 (93~96) 年代 F 30 (97~126) 注释 G 1 (127) 流派 有了上述的这些信息,我们就可以自己写代码,从MP3文件中抓取信息以及修改文件名了。但是,如果真的想写一个播放软件,还是需要读它的数据帧,并进行解码。 四、解析方法 当你想读取MPEG文件的信息时,解析前三个字节,判断是否有ID3V2标签,有则根据上面的方法算出ID3V2标签的总大小,这样就找到了音频数据帧的第一帧,读取它的头信息,获取比特率、采样率、MPEG版本号、Layer描述号等信息,根据上面提供的方法算出每帧的长度和每帧持续时间,对于定比特率的其它帧是相同的,也就是说解析第一帧就达到了目的。但这也不是所有情况。变比特率的MPEG文件使用使用所谓比特变换,也就是说每一帧的比特率依照具体内容变化。这时就需要你每一帧都解析。
计算机应用基础知识总结 第一章 1、 1946年第一台电子计算机ENIAC(埃尼阿克)在美国问世。 2、 计算机的时代划分: 电子管计算机时代、晶体管计算机时代、集成电路计算机时代与大规模集成电器计算 机时代。 3、 计算机的主要应用:网络应用 电子商务 科学计算 4、 CAD计算机辅助设计 CAM计算机辅助制造 CAT计算机辅助测试 CAI计算机辅助教学 5、 计算机的特点:运算速度快,、计算精度高,存储量大、记忆功能强,具有逻辑判断能力 、运算自动化。 6、 计算机系统有硬件系统与软件系统两大部分组成。 7、 硬件系统由控制器、运算器、存储器、输入设备与输出设备五部分组成。 8、 控制器与运算器合成为中央处理器CPU CPU与内存又称为主机。 输入设备与输出设备又统称为外部设备。 9、 运算器的运算分为算术运算与逻辑运算。 10、 存储器按功能不同可分为内存储器与外存储器。 11、 内存储器又称为内存或主存,主要用来存放CPU工作时用到的程序与数据及计算后得到 的结果:CPU只能直接访问内存,外存中数据需要先调入内存再读取。 12、 随机存储器(RAM)允许用户随时进行数据读写的存储器,断电后数据全部丢失。 13、 只读存储器(ROM)只允许用户读取数据,不能写入数据的存储器,断电后数据不丢失。 14、 外存储器 主要用来存放需要长期保存的程序与数据。 15、 软磁盘 又称软盘 速度慢 容量小 ;硬磁盘 又称硬盘,寿命长、存储量大。 16、 速度、容量、价格:硬盘>光盘>软盘 17、 高速缓存 18、 计算机主要的输入设备有键盘与鼠标;主要的输出设备有显示屏与打印机。 19、 微机的总线根据功能不同可分为地址总线、数据总线与控制总线三类。 20、 软件就是各种程序的总称,不同的功能的软件由不同的程序组成,这些程序经常被存储 在计算机的外存储器中,需要使用时装入内存使用。 21、 微机软件系统通常可以分为系统软件与应用软件2大类。 22、 系统软件就是微机必备软件,它就是操作使用计算机的基础。操作系统就是最重要的系 统软件。 23、 应用软件就是人们为了解决某种问题而专门设计的各种各样的软件。 24、 计算机操作系统有:DOS操作系统、Windows操作系统、Unix操作系统、Linux操作系统 。 25、 计算机性能指标:字长、速度、容量、带宽、版本与可靠性。 26、 计算机中的数据、信息都就是以二进制形式编码表示的。 27、 二进制 八进制 十进制 十六进制 28、 二进制的优越性:技术可行性、运算简单性、温与逻辑性。 29、 进制数值间的转换: 30、 计算机使用的标准编码就是ASCII(阿斯克码)。ASCII编码就是由美国国家标准委员会 制定的《美国国家信息标准代码》,它使用一个字节的低七位(高位为0)来表示一个字符 。0b1b1b3b4b5b6b7 31、 将国标码,规定每个汉字符号用2个字节表示,每个字节的最高位维0其余低七位表示汉 字符号编码信息。为了与英文字区别,将国标码的每个字节的最高位置为1,得到对应的 汉字符号的内码表示。 32、 程序语言:机器语言、汇编语言与高级语言。 33、 用高级语言设计的程序称为高级语言源程序。源程序不能直接被计算机理解执行,不需 进行过饭以后才能执行。通常有2中方式执行:编译方式与解释方式。 34、 汉字输入编码方案主要可分为4类:拼音码(音码)、字形码(形码)、音形码、流水码(区 位码输入,无重码)。 35、 多媒体计算机系统的3个基本特性:处理信息形式的多样性、多媒体技术的集成性与人 与多媒体计算机的交互性。 36、 多媒体的关键技术主要包括数据压缩与解压压缩。 37、 JPEG标准,针对静止图像的压缩国际标准。 38、 MPEG标准,针对活动图像编码,即信息压缩与解压缩。 第二章 1、 操作系统就是最重要的软件系统,就是用户与计算机硬件之间的接口。 2、 Windows系统就是单用户多任务操作系统。 3、 键盘组合键功能:鼠标指针常见形状及作用。 4、 Windows XP系统可分为活动窗口与非活动窗口。活动窗口最多只有一个,而非活动窗口可能有多 个,也可能没有。 5、 用鼠标拖动黄口的标题栏完成 移动 6、 窗口切换:Alt+Tab Alt+Esc 7、 快捷方式就是一种特殊类型的图标(也称快捷图标),它实质上就是一个指向对象的指针 ,而不就是对象本身,快捷图标所处的位置不影响其对象的位置,更名或删除也不会影响 到对象本身。 8、 在windows XP系统中文件名的长度可以有255个字符。文件名中不能出现的特殊符号有:/,\,< ,>,",", ,?。 9、 "回收站"就是硬件中的一块区域,使用"回收站"中只能存放硬盘中的文件文件夹。 10、 剪贴板就是windo
计算机应用基础知识总结 第一章 1. 1946年第一台电子计算机ENIAC(埃尼阿克)在美国问世。 2. 计算机的时代划分: 电子管计算机时代、晶体管计算机时代、集成电路计算机时代和大规模集成电器计算 机时代。 3. 计算机的主要应用:网络应用 电子商务 科学计算 4. CAD计算机辅助设计 CAM计算机辅助制造 CAT计算机辅助测试 CAI计算机辅助教学 5. 计算机的特点:运算速度快,、计算精度高,存储量大、记忆功能强,具有逻辑判断 能力、运算自动化。 6. 计算机系统有硬件系统和软件系统两大部分组成。 7. 硬件系统由控制器、运算器、存储器、输入设备和输出设备五部分组成。 8. 控制器和运算器合成为中央处理器CPU CPU和内存又称为主机。 输入设备和输出设备又统称为外部设备。 9. 运算器的运算分为算术运算和逻辑运算。 10. 存储器按功能不同可分为内存储器和外存储器。 11. 内存储器又称为内存或主存,主要用来存放CPU工作时用到的程序和数据及计算后得到 的结果:CPU只能直接访问内存,外存中数据需要先调入内存再读取。 12. 随机存储器(RAM)允许用户随时进行数据读写的存储器,断电后数据全部丢失。 13. 只读存储器(ROM)只允许用户读取数据,不能写入数据的存储器,断电后数据不丢失。 14. 外存储器 主要用来存放需要长期保存的程序和数据。 15. 软磁盘 又称软盘 速度慢 容量小 ;硬磁盘 又称硬盘,寿命长、存储量大。 16. 速度、容量、价格:硬盘>光盘>软盘 17. 高速缓存 18. 计算机主要的输入设备有键盘和鼠标;主要的输出设备有显示屏和打印机。 19. 微机的总线根据功能不同可分为地址总线、数据总线和控制总线三类。 20. 软件是各种程序的总称,不同的功能的软件由不同的程序组成,这些程序经常被存储 在计算机的外存储器中,需要使用时装入内存使用。 21. 微机软件系统通常可以分为系统软件和应用软件2大类。 22. 系统软件是微机必备软件,它是操作使用计算机的基础。操作系统是最重要的系统软 件。 23. 应用软件是人们为了解决某种问题而专门设计的各种各样的软件。 24. 计算机操作系统有:DOS操作系统、Windows操作系统、Unix操作系统、Linux操作系统 。 25. 计算机性能指标:字长、速度、容量、带宽、版本和可靠性。 26. 计算机中的数据、信息都是以二进制形式编码表示的。 27. 二进制 八进制 十进制 十六进制 28. 二进制的优越性:技术可行性、运算简单性、温和逻辑性。 29. 进制数值间的转换: 30. 计算机使用的标准编码是ASCII(阿斯克码)。ASCII编码是由美国国家标准委员会制定 的《美国国家信息标准代码》,它使用一个字节的低七位(高位为0)来表示一个字符。 0b1b1b3b4b5b6b7 31. 将国标码,规定每个汉字符号用2个字节表示,每个字节的最高位维0其余低七位表示 汉字符号编码信息。为了与英文字区别,将国标码的每个字节的最高位置为1,得到对 应的汉字符号的内码表示。 32. 程序语言:机器语言、汇编语言和高级语言。 33. 用高级语言设计的程序称为高级语言源程序。源程序不能直接被计算机理解执行,不 需进行过饭以后才能执行。通常有2中方式执行:编译方式和解释方式。 34. 汉字输入编码方案主要可分为4类:拼音码(音码)、字形码(形码)、音形码、流水 码(区位码输入,无重码)。 35. 多媒体计算机系统的3个基本特性:处理信息形式的多样性、多媒体技术的集成性和人 与多媒体计算机的交互性。 36. 多媒体的关键技术主要包括数据压缩和解压压缩。 37. JPEG标准,针对静止图像的压缩国际标准。 38. MPEG标准,针对活动图像编码,即信息压缩和解压缩。 第二章 1. 操作系统是最重要的软件系统,是用户和计算机硬件之间的接口。 2. Windows系统是单用户多任务操作系统。 3. 键盘组合键功能:鼠标指针常见形状及作用。 4. Windows XP系统可分为活动窗口和非活动窗口。活动窗口最多只有一个,而非活动窗口可能有 多个,也可能没有。 5. 用鼠标拖动黄口的标题栏完成 移动 6. 窗口切换:Alt+Tab Alt+Esc 7. 快捷方式是一种特殊类型的图标(也称快捷图标),它实质上是一个指向对象的指针 ,而不是对象本身,快捷图标所处的位置不影响其对象的位置,更名或删除也不会影 响到对象本身。 8. 在windows XP系统中文件名的长度可以有255个字符。文件名中不能出现的特殊符号有:/,\, <,>,",", ,?。 9. "回收站"是硬件中的一块区域,使用"回收站"中只能存放硬盘中的文件文件夹。 10. 剪贴板是windows XP系统中一段连续的可随存

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧