近来手机QQ音乐(iOS和Android)中出现了"听歌识曲"的功能.当听到中意的歌曲的时候,把手机的麦克风对准音响,并打开此功能,数秒之后便可以找到这首歌的歌名,歌手,专辑等信息,并可以同步显示歌词.为了了解这个看似神奇的功能的实现方式,便进行了简单的分析.
经过Google查找,没有找到任何关于这个接口的开发资料,所以只好进行抓包.
先是用Fiddler进行的,但是在设置了Fiddler代理以后,使用这个功能会莫名其妙的出现HTTP501错误,只好换Charles进行抓包.通过抓包,得到了它的请求地址:
http://proxy.music.qq.com/sound_print_r/search通过POST传输二进制音频,服务器便会以json的形式返回结果.根据抓包分析,Request的Header中有一个Host属性,
值为weixin.music.qq.com,使用接口的时候也要对这个属性进行设置,否者只会返回502 Bad Request.
写了一个简单的 iPhone App,传了几段MP3,却只得到了"无匹配结果"的返回,经分析发现,QQ音乐客户端在调用这个功能的时候,传输的音频采用了特殊的格式,对几次搜索的Request信息提取后分析,这种格式文件头如下:
00000000h: DD D0 D6 2C 1A A8 87 B5 89 62 82 3C 20 3B 41 30 ; 菪?.▏祲b? ;A0
00000010h: 0F 9C 4A A9 A3 13 2E BC FB D5 CA A4 80 E4 F5 28 ; .淛..见帐漉(
搜索以后没有找到相关的信息,也确定不下来这种文件的格式,所以只好到此为止.
不知是否有高手可以继续分析下去并且把这个"神奇"的接口应用起来.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/77665
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.