集成多個(gè)音樂播放SDK調(diào)研

調(diào)研問題:

? ? ? ?多個(gè)音樂播放SDK調(diào)研,包括百度音樂,喜馬拉雅,QQ音樂,網(wǎng)易云音樂,酷狗音樂。主要從以下兩個(gè)方便進(jìn)行調(diào)研:

1.是否存在相關(guān)SDK開發(fā)包

2.能否獲取歌曲的播放列表,或者唱片相關(guān)的信息,比如封面,出版年份,歌手身份信息及歌手其他專輯等

3.歌曲鏈接是否固定不變

4.調(diào)用不同的音樂sdk(百度音樂和喜馬拉雅)播放歌曲時(shí)是否存在沖突

5.喜馬拉雅音樂的優(yōu)劣

調(diào)研結(jié)果:

1.有SDK開發(fā)包:

? ?* 喜馬拉雅提供了Android和IOS端的SDK開發(fā)包,可以獲取專輯或聲音的標(biāo)簽,也可以獲取某個(gè)分類標(biāo)簽下的熱門專輯列表/最新專輯列表/最多播放專輯列表等,其中Android和IOS端的下載鏈接如下:

Android:http://open.ximalaya.com/sdk/android

? ? ? ? ? ?IOS:http://open.ximalaya.com/sdk/ios

2.無SDK開發(fā)包

(1)百度音樂: 沒有公開的API或者相關(guān)的SDK,有人通過分析聽歌時(shí)向?yàn)g覽器發(fā)出的Get請求從而得出隱藏的調(diào)用百度音樂的API,可以參考如下鏈接:

http://www.programering.com/a/MjN2czNwATc.html

http://www.itdecent.cn/p/a6718b11fdf1


(2)QQ音樂:沒有公開的API或者相關(guān)的SDK,在SHOWAPI網(wǎng)站上找到了經(jīng)過整理的QQ音樂接口[https://www.showapi.com/api/lookPoint/213],但是這個(gè)接口有請求次數(shù)的限制。也有其他人hack的API接口http://www.oschina.net/code/snippet_60100_53041,比如根據(jù)關(guān)鍵字搜索相關(guān)的歌曲(獲取對應(yīng)的歌曲真實(shí)鏈接和唱片圖片部分不可用,下文給出了其他方法)。獲取歌曲信息的例子如下:

http://s.music.qq.com/fcgi-bin/music_search_new_platform?t=0&n=5&aggr=1&cr=1&loginUin=0&format=json&inCharset=GB2312&outCharset=utf-8?ice=0&platform=jqminiframe.json&needNewCode=0&p=1&catZhida=0&remoteplace=sizer.newclient.next_song&w=北京歡迎你

其中最后的“w=北京歡迎你”表示搜索的關(guān)鍵字w是“北京歡迎你”。返回的數(shù)據(jù)如下(截取部分,只包含搜索結(jié)果的第一首歌曲):

{

"code": 0,

"data": {

"keyword": "北京歡迎你",

"priority": 0,

"qc": [],

"semantic": {

"curnum": 0,

"curpage": 1,

"list": [],

"totalnum": 0

},

"song": {

"curnum": 5,

"curpage": 1,

"list": [

{

"albumName_hilight": "民歌紅 3",

"chinesesinger": 0,

"docid": "5102957786187525786",

"f": "7168385|北京歡迎你|12509|龔玥|74805|民歌紅3|2490176|288|5|1|1|11556771|4622828|320000|0|33827090|34538333|6901601|7211965|0|000mbXqI3WE5bM|000jqHMB1iLuTg|002fPKiQ0tsT4J|31|0",

"fiurl": "",

"fnote": 0,

"fsinger": "龔玥",

"fsinger2": "",

"fsong": "北京歡迎你",

"grp": [],

"isupload": 0,

"isweiyun": 0,

"lyric": "",

"lyric_hilight": "",

"mv": "o0090Ibzqoz",

"nt": 10000,

"only": 0,

"pubTime": 1227801600,

"pure": 0,

"singerMID": "000jqHMB1iLuTg",

"singerMID2": "",

"singerName2_hilight": "",

"singerName_hilight": "龔玥",

"singerid": 12509,

"singerid2": 0,

"songName_hilight": "北京歡迎你",

"t": 1,

"tag": 10,

"ver": 0

},

......

其中“"f": "7168385|北京歡迎你|12509|龔玥|74805|民歌紅”字段中的“7168385”表示搜索結(jié)果中對應(yīng)歌曲的id。

歌曲的真實(shí)鏈接為http://tsmusic24.tc.qq.com/{$song_id}.mp3,其中{$song_id}為歌曲的id,替換為7168385后即可下載對應(yīng)的mp3歌曲或者在線試聽。

(3)網(wǎng)易云音樂:沒有公開的API或者相關(guān)的SDK,有hack的到的API,已被作者托管在了Github上,但是快兩年沒更新了,網(wǎng)易云音樂期間做了一些改動,該API已不可用。不過作者的分析結(jié)果可以借鑒,詳情參考:https://github.com/yanunon/NeteaseCloudMusic/wiki/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90API%E5%88%86%E6%9E%90


(4)酷狗音樂:沒有公開的API或者相關(guān)的SDK,有hack得到的API,可以獲取根據(jù)搜索的關(guān)鍵字(專輯名,歌曲名,歌手等)獲取相關(guān)的音樂列表,從而獲取到真實(shí)的m4a音頻文件播放的地址。相關(guān)代碼開源在了csdn上:https://code.csdn.net/flc1125/kugou-api/tree/master(代碼是PHP寫的,推薦在線測試鏈接:http://www.shucunwang.com/RunCode/php/)。并且該作者也利用該代碼搭建了一個(gè)聽歌的網(wǎng)頁:http://music.flc.ren/index,其中獲取歌曲列表部分的API有問題,但是獲取相應(yīng)歌曲的API可以正常使用。比如根據(jù)獲取的歌曲列表中的hash值播放《戀人心》這首歌,可以瀏覽器訪問http://m.kugou.com/app/i/getSongInfo.php?hash={hash}&cmd=playInfo,其中hash值替換為:0e21484e530e62cb1517a4ad2107181d,可以得到如下結(jié)果:

{"privilege":0,"bitRate":128,"extra":{"320filesize":8323730,"sqfilesize":23650202,"sqhash":"afc91d4d035a80c0079d4be482ca3de7","128hash":"0e21484e530e62cb1517a4ad2107181d","320hash":"1bd5672076da319baacc0142134adcc7","128filesize":3329238},"status":1,"hash":"0E21484E530E62CB1517A4AD2107181D","stype":11323,"errcode":0,"error":"","fileName":"魏新雨 - 戀人心","fileSize":3329238,"singerHead":"","url":"http:\/\/fs.open.kugou.com\/443c8db1a495acb4fde450515ea7545f\/57996e05\/G028\/M08\/0D\/17\/_JMEAFWeQDKIbSriAAy-1jvr7rcAAA9HwMKWEkADL7u175.m4a","extName":"m4a","ctype":1009,"timeLength":208}

其中http://fs.open.kugou.com/a3868713bb1cc9b42950c56510ff284b/57997517/G008/M03/09/01/SA0DAFUOKIuITL3KAAZC9_483O0AABByQObwfAABkMP188.m4a時(shí)該歌曲的下載鏈接。


3.歌曲鏈接是否固定

? ? ?目前主要包含兩種方案:

? ? ?(1)歌曲的url是固定不變的,一般包含兩種:

歌曲鏈接中不會直接包含真實(shí)的歌曲名稱,而是歌曲名稱的hash值或者由歌曲的id和經(jīng)過特定算法加密后的一串字符。比如酷狗音樂中獲得的非公開的API的歌曲url。

獲取的url是一串亂碼,字符經(jīng)過特定的算法組合,一般無法直接得出真實(shí)的url,需要對字符串進(jìn)行解碼。比如2011年前用蝦米音樂聽歌時(shí)服務(wù)返回的歌曲絕對地址是:

8h2xt912653.tFi%%959E5mt%a22%2457pp2mFF2%%%%3%Fi23F55553f.371EEEEA1n21412_1%.e51%7%18

看起來很奇怪的一串字符,類似于下面的方針:

采用的對歌曲url進(jìn)行矩陣操作(目前已開放API),

8 //類似凱撒方陣的列數(shù)(以下列8字符)

h2xt912653.

tFi%%959E5m

t%a22%2457p

p2mFF2%%%%3

%Fi23F55553

3f.371EEEE

A1n21412_1

%.e51%7%18

把這串字符豎起來讀就是下面這種樣子了:

http%3A%2F%2Ff1.xiami.net%2F23259%2F371119%2F14%252%5E17694%5E2%5E5%5E_1357%5E18.mp33

接著再解碼一下:

http://f1.xiami.net/23259/371119/14%2^17694^2^5^_1357^18.mp33

還是有些奇怪,把^ 替換為 0,得到真實(shí)的固定的歌曲地址:


http://f1.xiami.net/23259/371119/14%201769402050_1357018.mp3

(以上內(nèi)容參考自https://kanoha.org/2011/08/30/xiami-absolute-address/


(2)歌曲的地址不固定

服務(wù)器返回給客戶端的歌曲地址是隨機(jī)的,比如網(wǎng)易云音樂。通過查看github上其他人分享的解析網(wǎng)易云音樂的源碼(https://github.com/darknessomi/musicbox)以及darknessomi(https://github.com/darknessomi/musicbox/wiki/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90API%E5%88%86%E6%9E%90)對其的進(jìn)一步解析可以發(fā)現(xiàn)網(wǎng)易云音樂在返回給用戶的歌曲地址經(jīng)過了加密,并且每次用戶的每次請求得到的地址都不相同,每個(gè)地址在過了一段時(shí)間以后(大約半個(gè)小時(shí)左右)會失效。下圖為多次獲取id為27902910的歌曲地址時(shí)服務(wù)器返回的結(jié)果:

以“http://m10.music.126.net/20160729154255/140cb0217a8d78e2961eb324199ab405/ymusic/b022/7457/0536/77357411f4cbe4f1552aecf06dec89d7.mp3”為例,其中每次請求時(shí)變化的部分為“20160729154255/140cb0217a8d78e2961eb324199ab405”,“20160729154255”主要包含年月日時(shí)分秒,指的是歌曲地址的過期時(shí)間,“140cb0217a8d78e2961eb324199ab405”這部分由服務(wù)器隨機(jī)生成。個(gè)人猜測多個(gè)鏈接應(yīng)該是對應(yīng)著物理磁盤上的同一個(gè)文件,服務(wù)器在一段時(shí)間內(nèi)(比如半個(gè)小時(shí))保存生成相應(yīng)歌曲地址的隨機(jī)數(shù),在用戶有播放音樂的請求時(shí)在對歌曲地址進(jìn)行解密,取出其對應(yīng)的絕對物理地址。

4.測試demo(Android)

? ? ? 目前主要是調(diào)用的QQ音樂的非公開的API,可以通過查詢關(guān)鍵字查找相應(yīng)的歌手或者歌曲,默認(rèn)只顯示10條以內(nèi)的結(jié)果。歌曲信息部分為通過API接口返回的json格式的查詢信息,歌曲列表(解析)為解析后的歌曲id,歌曲名稱,歌手名稱結(jié)果,最多顯示10條,通過選取列表框中的歌曲病點(diǎn)擊播放按鈕可以進(jìn)行歌曲試聽。 軟件界面如下:


軟件apk鏈接:app-debug.apk

AS工程源碼:MusicDemo.zip

5.不同的音樂sdk之間是否會存在沖突

? ? ? ?目前主要測試了百度音樂的sdk和喜馬拉雅的sdk,兩者在播放在線歌曲時(shí)不存在沖突,比如調(diào)用百度音樂播放在線音樂的接口播放“千千闕歌”,調(diào)用喜馬拉雅的播放接口播放一段有聲讀物,可以從手機(jī)的揚(yáng)聲器中同時(shí)聽到歌曲和有聲讀物的內(nèi)容,兩者之間分別暫停或者退出均不影響。本次主要測試的是android版本的sdk,這兩種音樂sdk中均對android系統(tǒng)內(nèi)的MediaPlayer進(jìn)行了封裝。

? ? ? ?下面的Demo中整合了百度音樂的sdk和喜馬拉雅的sdk,Demo的主頁面的上面部分為百度音樂,下面部分為喜馬拉雅音樂。其中百度音樂的接口中固定了幾首歌的id,可以通過點(diǎn)擊“next”按鈕進(jìn)行切換。喜馬拉雅中可以通過點(diǎn)擊試聽不同的有聲讀物。界面如下:


Demo的代碼和測試apk如下:

TingPhoneSDKTest-debug.apk

TingPhoneSDKTest.zip

6.喜馬拉雅音樂的優(yōu)劣

? ? 優(yōu)點(diǎn):目前免費(fèi)接入,有聲節(jié)目資源豐富

? ? 缺點(diǎn):(1)音樂資源不足

? ? ? ? ? ? ? ?(2)音頻資源中會插入廣告,以下是開發(fā)文檔中關(guān)于音樂播放流程中插入廣告的說明:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,745評論 25 709
  • 我們都曾經(jīng)討論過這樣的一個(gè)話題:愛你的人和你愛的人,你會選擇哪個(gè)來與你相伴終生呢?每個(gè)人的回答都是不一樣的。有...
    溫柔你不懂得愛閱讀 654評論 0 4
  • 郭相麟 站在藝術(shù)的殿堂 看那一幅幅 惟妙惟肖的作品 一把剪刀 一張紙 一顆理解生活 熱情奔放的心靈 剪出來的藝術(shù)人...
    郭相麟閱讀 211評論 0 0
  • 大家對于通過控制飲食來達(dá)到減肥的效果首先想到的就是控制肉類的攝入,因?yàn)槠渲泻兄救菀资贵w重增加,而忽視了對糖...
    阿瑤374534閱讀 295評論 0 0

友情鏈接更多精彩內(nèi)容