MP3文件ID3V2信息长度的识别问题

xiao0703 2009-06-01 12:00:55
在做一个MP3的lib文件,原来用的识别MP3文件ID3V2信息的方法就是在网上找的
ID3V2_frame_size = (int)(Size[0] & 0x7F) << 21
| (int)(Size[1] & 0x7F) << 14
| (int)(Size[2] & 0x7F) << 7
| (int)(Size[3] & 0x7F) + 10;
得到长度在文件指针中跳过这段就可以了,不过最新过来一批MP3文件,这种方法计算出来的ID3V2信息长度都要比正常的小407字节。就是比如用Winamp查看,该文件标签头长度是706,但通过上面的方法计算是299,这批文件都会相差407个字节,但是这些文件都可以用Winamp或Windows Media Player正常播放,请问有明白的大虾知道是什么原因么?是MP3新出了算法,还是Winamp或Windows Media Player采取的特殊的算法(比如直接获取到帧头,没有查找到这方面的资料)?
多谢多谢,

...全文
564 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Treazy 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xiao0703 的回复:]
“2.3中当有有标志字节设置有扩展头时会需要有大小端字节的转换”这个要如何转换呢?
我用winamp得到的ID3V2的长度是正确的,把从winamp中获取的长度直接写在程序里就好用的,我用的这批MP3都是ID3V2.3的,我感觉也是有其他的标志位来判断,不过在网上找不到,您知道怎么识别么
[/Quote]

抱歉代码无法公开

但是具体资料你可以上http://www.id3.org/
在其Taglib中有详细的说明和已经封装好的类,你可以参考并花点时间研究研究,欲速则不达啊 :)
xiao0703 2009-06-03
  • 打赏
  • 举报
回复
好的,我去看一下
Treazy 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiao0703 的回复:]
正常在网上下的都正常,只有这次特制的有问题
[/Quote]
[Quote=引用 6 楼 xiao0703 的回复:]
编码格式有什么关系?
[/Quote]
在标签头中的标志字节的设置会影响各个ID3V2版本的标签头
ID3V2.1
ID3V2.2
ID3V2.3
ID3V2.4
各个版本的标志字节的设置都是有差异的

而Winamp中一般不进行判断
2.3中当有有标志字节设置有扩展头时会需要有大小端字节的转换

楼主你看mp3数据时,可以直接用UE或者其他工具打开分析
winamp得出的数据未必是正确的

但由于其分析标签帧和数据时都可以完全定位,因此播放应该没什么问题!
xiao0703 2009-06-02
  • 打赏
  • 举报
回复
“2.3中当有有标志字节设置有扩展头时会需要有大小端字节的转换”这个要如何转换呢?
我用winamp得到的ID3V2的长度是正确的,把从winamp中获取的长度直接写在程序里就好用的,我用的这批MP3都是ID3V2.3的,我感觉也是有其他的标志位来判断,不过在网上找不到,您知道怎么识别么
lingyin55 2009-06-01
  • 打赏
  • 举报
回复
友情帮顶下。
  • 打赏
  • 举报
回复
帮顶吧
xiao0703 2009-06-01
  • 打赏
  • 举报
回复
编码格式有什么关系?
xiao0703 2009-06-01
  • 打赏
  • 举报
回复
正常在网上下的都正常,只有这次特制的有问题
Dinelgua 2009-06-01
  • 打赏
  • 举报
回复
study
陽洸膂珵 2009-06-01
  • 打赏
  • 举报
回复
帮顶!
「已注销」 2009-06-01
  • 打赏
  • 举报
回复
可能与编码有关?
确定都是相同的编码吗?
还是UTF-8格式的编码?还是GBK?
Treazy 2009-06-01
  • 打赏
  • 举报
回复
Please have a reference to http://www.id3.org/

You can download the taglib to check whether you're right!

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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