soundcloud是如何隐藏流媒体音频的URL的



我正试图为我的HTML5播放器隐藏我的音频流的URL,我真的很难想出这样做的方法,然后我意识到,soundcloud必须隐藏他们流的URL。所以我上了soundcloud,打开控制台,播放了一首曲目,但我看不出URL有任何明显的隐藏方式。之后,我查看了DOM树,看看里面是否有任何类型的音频信息,但什么也没发现!甚至没有播放器/音频的ID,所以我很困惑soundcloud是如何做到的。

现在我已经尽我所能隐藏音频URL了。我已经在曲目的DOM中放入了一个ID,在单击播放按钮时获得了该ID,并从数据库中检索了该ID的URL。显而易见的问题是,任何愿意的人都可以去控制台从网络事件中获取URL。

我并没有试图突破soundcloud的安全来下载我不应该下载的曲目。我只是好奇他们是如何隐藏URL的。现在,我也很好奇每个音轨是如何区分的,因为DOM中没有任何东西可以区分它们(无论如何,我在简短的查看中都没有发现)。

那么,简言之,有人知道声云是如何实现这一点的吗?

Soundcloud几乎是一个纯JS网站。

正如您所说,并没有加载HTML的歌曲ID。歌曲的识别方式是通过页面URL。通过完成。这个url(示例):

https://api.sndcdn.com/resolve?url=https%3A//soundcloud.com/hoodinternet/joywave-tongues-hood-internet-remix&_status_code_map%5B302%5D=200&_status_format=json&client_id=YOUR_CLIENT_ID

这返回如下内容:

{"status":"302 - Found","location":"https://api.soundcloud.com/tracks/100270342?client_id=YOUR_CLIENT_ID"}

接下来,它从上面的JSON加载位置URL。这会返回一组关于轨道的信息,包括:

stream_url: "https://api.soundcloud.com/tracks/100270342/stream"

然后它加载这个URL:

https://api.sndcdn.com/i1/tracks/100270342/streams?client_id=YOUR_CLIENT_IT

返回如下响应:

{"http_mp3_128_url":"https://ec-media.soundcloud.com/2gNVBYiZ06bU.128.mp3?ff61182e3c2ecefa438cd021sdf02d0e385713f0c1faf3b0339595664fe070de810d30a8e3a1186eda958909e9ed97799adfeceabc135efac83aee4271217a108450591db3b88u0026AWSAccessKeyId=AKIAsdfJ4IAZE5EOIdsf7PA7VQu0026Expires=1374883403u0026Signature=%2B1%2B7dfdfLN4NWP3C3bNF3gizSEVIU%3D"}

这就是他们隐藏流URL的方式。唯一不明显的部分是,他们通过使用URL作为参数点击API来找到歌曲ID。同样可以在支持它的轨道上下载URL。

如果您转到SoundCloud.com并打开调试器(我正在使用Chrome)。看看"网络"选项卡,你会看到一个调用音频的脚本?anonymous_id##########。

这是一个类似REST调用的结构,意味着他们将id传递给后端的服务,并匿名返回音频输出。

他们更改了媒体中心地址,现在他们正从如下链接进行流式传输。但是对这个网址的访问受到限制。

https://cf-media.sndcdn.com/Exbr0RDsakIP.128.mp3?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiKjovL2NmLW1lZGlhLnNuZGNkbi5jb20vRXhicjBSRHNha0lQLjEyOC5tcDMiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0NzgyOTg5NTV9fX1dfQ__&签名=niisPQ5NHUqclFI9Mb-eH1BJvOC~0zUZme8CLMkocXMs2zCWe2U2~chPYDydJuYYV3iFtjqwCK~t~kQg2o5TKx0~iUSZ1E4ZNBbhvHJWqBliILbEd2gZzBnrHtS0nBCMfIuUVWmkMtWAEWXI7NyvOBPqJab8KZR8qkFnlyzefHfssxPGWV8sW09en1VkjDRPasHRmc~w22lSpF3dWqZAFbocRFZGLS-h5eXj~Qin-kxMo2DgxHE0K-Svg4BPAJ83s408SkruRq3q3B46IBxmR4mDfx4U8TtN1mvQZGWtXESm~rY8K40ZSwdTloE8eMiogFsjH5HzXvc3pBFA__&密钥对Id=APKAJAGZ7VMH2PFPW6UQ

最新更新