2014-11-05 70 views
1

我使用Soundmanager2從soundcloud傳輸文件並顯示Eq視覺效果,但在暫停或更改曲目時遇到eqdata問題。Soundmanager2 Soundcloud API crossdomain.xml

Shown here

據我所知,Flash是無法訪問元數據因的SoundCloud上的「crossdomain.xml的」文件中定義的跨域政策,在這個崗位看出:(以及其他許多)

How to use SoundManager2 to stream from SoundCloud, and make visualizations?

我意識到我必須先解析軌道的stream_url,然後才能將其加載到聲音管理器中。我有一個AJAX調用一個PHP腳本解析URL(如下圖所示),這樣做的:用於解決stream_url

<?php 

require 'include/referrer_check.php'; 
require 'include/SC_API_KEY.php'; 
require 'include/API_cache.php'; 

$track_id = intval($_GET['id']); 
$key = get_soundcloud_api_key(); 
$api_call = 'http://api.soundcloud.com/tracks/'.$track_id.'/stream/?client_id='.$key; 

function get_web_page($url) { 

    /* 
    * hat tip: http://forums.devshed.com/php-development-5/curl-get-final-url-after-inital-url-redirects-544144.html 
    */ 

    $options = array( 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_RETURNTRANSFER => false,  // return web page 
     CURLOPT_HEADER => true, 
     CURLOPT_NOBODY => true, 
     CURLOPT_CONNECTTIMEOUT => 5,  // timeout on connect 
     CURLOPT_TIMEOUT  => 5,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
     CURLOPT_RETURNTRANSFER => true,  // return web page 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    return $header; 
} 

$myUrlInfo = get_web_page($api_call); 

echo $myUrlInfo["url"]; 

?> 

var client_id = '866143113772fec9556700f7f88f3abc', 
url = 'http://api.soundcloud.com/resolve.json?url=http://soundcloud.com/aries-audio-music/tracks&client_id='; 

$.getJSON(url+client_id+'&callback=?', function(playlist){ 

    $.each(playlist, function(index, track) { 

     //append to playlist 
     $('<li id="tr-'+track.id+'">' + track.title + '</li>').data('track', track).appendTo('.tracks'); 

     //get resolved stream url 
     $.ajax({ 
      type: 'GET', 
      url: 'get_sc_url.php?id='+track.id, 
      success: function(data) { 
       console.log(data); 
       sm2_addtrack(track, data);  //create SM2 sound object with resolved url 
      } 
     }); 
    }); 
}); 

function sm2_addtrack(track, stream_url) { 
    soundManager.createSound({ 
     id: 'track_' + track.id, 
     url: stream_url,    
     usePolicyFile : true, 
     usePeakData: false, 
     useWaveformData: false, 
     useEQData: true, 
..... 

get_sc_url.php我得到的結果是什麼像這樣:

ec-media.soundcloud.com/Ez0B3lUZjjCR.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a52200996dfabd3cefb29b7554ff4fd02baab5100d3a070e07d55f6e1eb41808c65398ce84cd496788c171f7e4 & AWSAccessKeyId = AKIAJNIGGLK7XA7YZSNQ &過期= 1415223069 &簽名= A0qaC1Nr3%2FXw4jwFYMjA%2F98arwI%3D

起着但沒有給我光譜數據都和我仍然得到 computeSpectrum()(EQ數據)的SecurityError:錯誤#2123 從soundmanager2。

我確定ec-media.soundcloud.com/crossdomain.xml正在下載,但我仍然無法解決此問題。

回答

0

我認爲這可能是因爲我試圖從HTTP文檔訪問soundcloud crossdomain.xml策略文件(即HTTPS)。 secure =「false」未在Soundcloud的crossdomain.xml策略文件中定義,因此默認爲secure =「true」,因此SWF無法訪問任何內容。

我懷疑的SoundCloud永遠不會設置安全=「假」在他們的crossdomain.xml顯而易見的原因(這違背甚至有HTTPS的目的)。我認爲這就是爲什麼我得到computeSpectrum()(EQ數據)SecurityError:錯誤#2123,但我沒有訪問啓用HTTPS的服務器來測試這個,所以我可能是錯的。