我试图为我的 HTML5 播放器隐藏我的音频流的 URL,并且真的很难想办法这样做,然后我意识到,soundcloud 必须隐藏他们的流的 URL。所以我进入了 soundcloud,打开控制台并播放了轨道,但我看不到任何隐藏 URL 的明显方式。在此之后,我查看了 DOM 树,看那里是否有任何类型的音频信息,但我一无所获!甚至没有播放器/音频的 ID,所以我对 soundcloud 是如何做到的感到非常困惑。
到目前为止,我已尽我所能隐藏音频 URL。我在轨道的 DOM 中放置了一个 ID,单击播放按钮时获得了该 ID,并从数据库中检索了该 ID 的 URL。这样做的明显问题是,任何愿意的人都可以直接转到控制台并从网络事件中获取 URL。
我并没有试图突破 soundcloud 的安全性来下载我不应该下载的轨道。我只是好奇他们是如何隐藏 URL 的。现在我也很好奇每条轨道是如何区分的,因为 DOM 中没有任何东西可以区分它们(无论如何我在简短的查看中都没有发现)。
所以,简而言之,有人对 soundcloud 如何实现这一点或如何实现这一点有任何想法吗?
最佳答案
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 加载位置 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?ff61182e3c2ecefa438cd021sdf02d0e385713f0c1faf3b0339595664fe070de810d30a8e3a1186eda958909e9ed97799adfeceabc135efac83aee4271217a108450591db3b88\u0026AWSAccessKeyId=AKIAsdfJ4IAZE5EOIdsf7PA7VQ\u0026Expires=1374883403\u0026Signature=%2B1%2B7dfdfLN4NWP3C3bNF3gizSEVIU%3D"}
这就是他们隐藏流 URL 的方式。唯一不明显的部分是他们通过使用 URL 作为参数访问 API 来找到歌曲 ID。对于支持它的轨道上的下载 URL 也可以这样做。
关于javascript - soundcloud 如何隐藏流媒体音频的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892702/