晨风交流论坛_CMP_CChat_Flash_音乐_视频_播放器_live直播_聊天室

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 13699|回复: 4

[教程] 关于CMP无法显示MP3声音频谱和无法读取ID3资料

[复制链接]
发表于 2010-7-5 17:55:22 | 显示全部楼层 |阅读模式
官方QQ群:102348392 | 捐赠CMP
CMP附带了大概10种声音频谱效果,以便在播放MP3时,视频窗口不会单调
同时CMP4还支持外载自定义频谱效果,具体可到索引帖子下载频谱插件
CMP还可以在mp3播放10秒左右,读取mp3的id3资料,包括歌名,专辑,歌手,并显示在status状态栏

但是,要显示声音频谱和读取id3资料都存在一个安全限制,这也是flashplayer的固有安全限制

flash官方文档是这样说明的:
当flash播放有声音的媒体时,可以通过调用SoundMixer.computeSpectrum()方法,获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中,注意:
此方法受本地文件安全性限制和跨域加载限制的约束。 如果正在使用本地 SWF 文件或从一个服务器(该服务器与执行调用的 SWF 位于不同的域中)上加载的声音,则可能需要通过URL策略文件(crossdomain.xml)来解决沙箱限制问题。

所以,我们一般远程调用并播放MP3地址时,一般都会有跨域安全限制问题,导致无法显示声音频谱和读取id3资料
因为一般mp3所在的服务器都不会特意放一个策略文件crossdomain.xml来允许读取频谱数据

既然能跨域播放mp3声音,为什么又不允许随便读取频谱数据呢?
这就要请大家自己去查阅adobe官方flashplayer的白皮书了
个人猜想是因为:
读取声音数据并播放是安全的,顶多就是哑巴,没有声音
但读取频谱数据的话(还有ID3数据),可以得到具体的二进制数据,这样如果不是MP3文件那么就是一个漏洞了,因为可以间接的通过这个跨域读取其他数据

如果上面的不是很明白,下面再举一个跨域的例子:

1,a有播放器
2,b有mp3音乐
3,a请求取得b的mp3频谱数据
4,那么a需要征求b的同意才能成功读取
所以b有权限制别人(如a)是否能读取频谱数据,这个权利可以放在crossdomain.xml跨域策略文件中
默认crossdomain.xml是不允许读取的,只有b在策略中设置了允许a读取才能显示频谱

也就是策略文件crossdomain.xml和mp3媒体文件必须是放在一个服务器上的,跨域时放在cmp所在服务器是没用的

当然在同一个域下不受此限制,这好比自己用自己的东西,无需他人同意
在本地file协议或exe一类的环境中(如桌面版),也没有这些限制,可以读取频谱数据

策略文件crossdomain.xml设置信息例子,如:
  1. <?xml version="1.0"?>
  2. <cross-domain-policy>
  3.     <allow-access-from domain="*" to-ports="*" />
  4. </cross-domain-policy>
复制代码
这表示放置crossdomain.xml所在的域允许所有其他站(*表示任意)读取
也可设置只允许某某站读取,如只允许www.cenfun.com上的CMP读取:
  1. <?xml version="1.0"?>
  2. <cross-domain-policy>
  3.     <allow-access-from domain="www.cenfun.com" to-ports="*" />
  4. </cross-domain-policy>
复制代码
to-ports为允许的端口号,*表示任意,这样的允许站点可以添加任意个数,如还允许www.163.com站读取,则:
  1. <?xml version="1.0"?>
  2. <cross-domain-policy>
  3.     <allow-access-from domain="www.cenfun.com" to-ports="*" />
  4.     <allow-access-from domain="www.163.com" to-ports="*" />
  5. </cross-domain-policy>
复制代码
相关结论:
1,如果直接播放其他域的MP3,一般是肯定不能把策略文件放到那个服务器上去的,所以也无法显示频谱和id3信息
2,除了这个,实际上flash其他一些跨域数据的加载都有同样的安全限制,比如歌词,列表,配置,皮肤包等等都不行
3,如果不能放置策略文件,那么我们还可以通过程序代理来解决跨域问题,把数据代理到了同域中,自然就没有跨域问题了

最新版本的CMP4支持新的取样播放设置,可以间接的播放MP3进而显示频谱,可以设置:
sound_sample="true"
相关详情见:http://bbs.cenfun.com/thread-13199-1-1.html


发表于 2010-11-19 14:12:04 | 显示全部楼层
回复 cenfun 的帖子

老大 我的音乐盒 没有频谱啊怎么回事
http://www.miyun58.com/portal-to ... d-1-topicid-57.html
发表于 2013-1-31 05:56:00 | 显示全部楼层
策略文件crossdomain.xml设置信息例子
发表于 2013-2-17 22:24:35 | 显示全部楼层
流明 学习
发表于 2015-1-13 23:41:49 | 显示全部楼层
请问可以调用标题图片做背景吗?

QQ|客服QQ44023478|Archiver|手机版|小黑屋|晨风交流论坛 ( 粤ICP备05008793号 )

GMT+8, 2018-12-13 16:23 , Processed in 0.055452 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表