soundcloud如何隐藏流式音频的URL

时间:2013-07-26 23:43:33

标签: javascript html5 audio soundcloud

我试图隐藏我的HTML5播放器的音频流的URL,并且真的很难想到这样做的方法然后我意识到,soundcloud必须隐藏其流的URL。所以我进入了soundcloud,打开了控制台并播放了一首曲目,但是我看不到隐藏URL的任何明显方式。在此之后,我看了一下DOM树,看看那里是否有任何类型的音频信息,但我一无所获!甚至没有播放器/音频的ID,所以我对soundcloud如何做到这一点非常困惑。

到目前为止,我已经尽可能地隐藏了音频网址。我在轨道的DOM中放置了一个ID,在单击播放按钮时获取了该ID,并从数据库中检索了该ID的URL。显而易见的问题是,任何有意愿的人都可以直接进入控制台并从网络事件中获取URL。

我并没有试图超越soundcloud的安全性来下载我不应该的曲目。我只是好奇他们是如何隐藏URL的。现在我也很好奇每个曲目是如何区分的,因为DOM中没有任何东西可以区分它们(不是我在简短的表面上找到的)。

那么,简而言之,是否有人对soundcloud如何实现这一目标或如何实现这一目标有任何想法?

3 个答案:

答案 0 :(得分:20)

Soundcloud几乎是一个纯粹的JS网站。

正如你所说,没有加载HTML的歌曲的ID。歌曲被识别的方式是页面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加载位置网址。这将返回有关该轨道的大量信息,包括:

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

然后加载此网址:

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?ff61182e3c2ecefa438cd021sdf02d0e385713f0c1faf3b0339595664fe070de810d30a8e3a1186eda958909e9ed97799adfeceabc135efac83aee4271217a108450591db3b88\u0026AWSAccessKeyId=AKIAsdfJ4IAZE5EOIdsf7PA7VQ\u0026Expires=1374883403\u0026Signature=%2B1%2B7dfdfLN4NWP3C3bNF3gizSEVIU%3D"}

这就是他们隐藏流媒体网址的方式。唯一不明显的部分是他们通过点击带有URL作为参数的API来找到歌曲ID。在支持它的轨道上下载URL也可以这样做。

答案 1 :(得分:2)

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

这的结构类似于REST调用,这意味着它们将id传递给后端的服务,并以匿名方式返回音频输出。

答案 2 :(得分:0)