2015-06-04 78 views
1

我正在嘗試向SoundCloud API發出請求。然後,當我得到響應時,我將stream_url設置爲一個< audio>元素的來源。SoundCloud Api重定向混淆和音頻Api流

這工作:

http://matthiasdv.org/beta/

但並非總是如此。當你搜索「倭」例如,你可以玩的第一個幾首曲目,沒有任何問題。但是當你嘗試播放'倫敦語法 - 嘿現在(倭黑猩猩混音)' - 第7個結果 - 它不會播放。它不會帶來任何錯誤。

我一直在修改Chrome的webdev工具,並在網絡標籤下看到所做的請求。我發現,確實發揮軌道有一個簡短的請求的URL,就像這樣:

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 url周圍包裝一個快速的encodeURI()不起作用。

此外,我不明白這些網址來自哪裏。在我的代碼,我引向我的Ajax請求,例如:

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

因此,在GET請求中請求URL(下Chrome的Webdev的工具「網絡」作爲中)是沒有意義的我。 SoundCloud是否將請求重定向到CDN主機?我注意到的另一件事是,每次TWO請求被解僱而不是一個。第一個總是被取消,並且包含「臨時標題顯示」警告。我相信這是因爲我設置了crossOrigin =「anonymous」,否則某些瀏覽器不會加載內容。

我猜可能會導致問題是,當URL設置爲元素的src屬性時,在處理音頻Api和播放(https://github.com/jsantell/dancer.js/)的dancer.js庫中觸發了一個evenListener。這可能是encodeURI()在庫中的某處需要的。

我決定要問的問題,無論如何,因爲我不明白是怎麼URL請求的上方形成和爲什麼是兩個,而不是一個請求被解僱,爲什麼第一個總是被取消。

這我解決播放問題任何提示非常歡迎太多......

回答

3

當您運行

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

你從服務器,這是一個HTTP 302找到響應該請求一個URL重定向(http://en.wikipedia.org/wiki/HTTP_302)。這會導致瀏覽器從服務器返回的新URL加載,從而導致您看到兩個請求。服務器基本上說:「是的,我知道在哪裏找到該文件,請問那邊的那個人」。

爲什麼一個人工作,而另一個不工作,我認爲,https://ec-media.sndcdn.com有訪問控制頭設置,而https://cf-media.sndcdn.com沒有。這是服務器配置的一個問題,不幸的是客戶端無法控制任何東西。不知道,如果這是一個慎重的動作,或者你可以問問他們。

+0

謝謝,很好的回覆!這清除了一切。從你提到的內容來看,我有一種預感,認爲Access-Control標題中的差異是由版權問題引起的。爲了證明這一點:像50 Cent這樣的大牌藝術家通常會遇到這個問題。我想他們設置了一些「只允許在SoundCloud上播放音軌」的設置。如果是這種情況,那麼在響應中應該有一個值表示這個...如果我找到了修復程序,將會更新 – matthiasdv