【问题标题】:How has soundcloud hidden the URL of streaming audiosoundcloud 是如何隐藏流式音频的 URL 的
【发布时间】:2013-07-26 23:43:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript html audio soundcloud


    【解决方案1】:

    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 也可以这样做。

    【讨论】:

    • 有些声音是不可串流的?这是一个例子soundcloud.com/ymcmbofficial/lil-wayne-ft-drake-and-future任何解决方案?
    • @Kassem - 这对我来说是可流式传输的。我不久前制作了这个 soundcloud 下载器:gist.github.com/calvin-nt/6629464 - 像这样使用它:python sc_dl.py soundcloud.com/ymcmbofficial/lil-wayne-ft-drake-and-future - 它需要对 python 的请求。
    • 谢谢@scandinavian_ 我不熟悉pyhon,但据我所知,那首歌曲的流媒体网址将是api.sndcdn.com/i1/tracks/73544191/streams?client_id= 我已经尝试使用带有我的客户端ID的浏览器,但它给出了403 禁止。有什么想法吗?
    • 哦,我现在明白了,您使用 soundcloud 本身提供的密钥。太聪明了:)谢谢
    【解决方案2】:

    如果您访问 SoundCloud.com 并打开您的调试器(我正在使用 Chrome)。查看“网络”选项卡,您会看到一个调用 audio?anonymous_id######### 的脚本。

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 哦,查看上面的url后发现url不受限制。 :D
      • 只有包含查询字符串Policy才能访问上面的url
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多