SoundCloud Api重定向混淆和音频Api流

时间:2015-06-04 14:24:50

标签: javascript ajax cors soundcloud web-audio

我正在尝试向SoundCloud API发出请求。然后当我得到响应时,我将stream_url设置为<的源。音频>元件。

这有效:

http://matthiasdv.org/beta/

但并非总是......当你搜索“倭黑猩猩”时例如,您可以毫无问题地播放前几首曲目。但是当你尝试演奏伦敦语法 - 嘿现在(倭黑混音)' - 第7个结果 - 它不会参加比赛。它不会抛出任何错误。

我一直在修补Chrome的webdev工具,在网络标签下,我看到了正在发出的请求。我发现播放的曲目有一个简短的请求网址,如下所示:

https://ec-media.sndcdn.com/vR5ukuOzyLbw.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a522029f6bfab939b9ae57af14bba24e44e1542924c205ad28a52352010cd0e7dd461e9243ab54dc0f0bba897d

那些看起来不像这样的人:

https://cf-media.sndcdn.com/8PCswwlkswOd.128.mp3?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiKjovL2NmLW1lZGlhLnNuZGNkbi5jb20vOFBDc3d3bGtzd09kLjEyOC5tcDMiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MzM0Mjc2MDN9fX1dfQ__&Signature=cD-XVhnvQnIATkfrBDDVy0Q7996C8DymwxRLwBBduab0~L0MynF1ftcMky~21T8Q-gCZ2~dMK8dz7uVxvJTIJgXPxEZvhNtbvescMK6iFMg-xSAty-4OhJYjrIZJ2j8NE4uNA4Ml7MWbWcQw4KtUtpZitOQuguS3DPFDII3VF-dvzb2L~xG-G8Uu3uOnI1WhnAAfhf1QWMO7swwB89HtcCiuVBmfluG28ELrJEq-au8mqIMB3sLTno6nUuTtpHXR2ayXBsYcYLLJVXa3Ul8p1rhLS5XWHKWXY8xug4jwey27~C5PVAomK6Z5lJx-mz-0zYs4riUYtl0zACbZ1OfwTQ__&Key-Pair-Id=APKAJAGZ7VMH2PFPW6UQ

现在乍一看,我认为这是一个编码问题,但在ajax网址周围包装快速encodeURI()不起作用。

此外,我不明白这些网址来自何处。在我的代码中,我指示我的ajax请求,例如:

https://api.soundcloud.com/tracks/140326936/stream?client_id=5c6ceaa17461a1c79d503b345a26a54e

因此,GET请求中的请求网址(在Chrome'网络'在Chrome的webdev工具中找到)对我没有任何意义。 SoundCloud是否将请求重定向到CDN主机?我注意到的另一件事是每次发出两个请求而不是一个。第一个始终被取消并包含一个'临时标题显示'警告。我相信这是因为我设置了crossOrigin ="匿名",否则某些浏览器不会加载内容。

我猜可能导致问题的是当url被设置为元素的src属性时,在dancer.js库中触发evenListener,该库处理音频Api和播放(https://github.com/jsantell/dancer.js/) 。可能是库中某处需要encodeURI()。

我决定无论如何都要问这个问题,因为我不明白上面的请求网址是如何形成的,以及为什么有两个(而不是一个)请求被解雇,为什么第一个请求总是被取消。

我解决播放问题的任何提示都非常受欢迎......

1 个答案:

答案 0 :(得分:3)

运行

请求时
 https://api.soundcloud.com/tracks/140326936/stream?client_id=5c6ceaa17461a1c79d503b345a26a54e

您从服务器获得HTTP 302 Found响应,这是一个URL重定向(http://en.wikipedia.org/wiki/HTTP_302)。这将导致您的浏览器从服务器返回的新URL加载,从而加载您看到的两个请求。服务器基本上说“是的,我知道在哪里找到那个文件,在那边问那个人”。

我认为,一个人工作的原因和另一个不工作的原因是https://ec-media.sndcdn.com设置了访问控制标头,https://cf-media.sndcdn.com没有。这是服务器配置的问题,遗憾的是,您无法从客户端控制任何内容。 Dunno,如果是soundcloud的故意移动,或者你可以向他们询问这些内容。