由于缺乏CORS政策,无法分析Soundcloud的流媒体音频



我正在开发这个可视化工具 http://trif.it,它仍然可以在Chrome Stable(41.x)上运行良好,但在Chrome Dev,Beta和Canary(42.x及更高版本)中停止工作,因为Chrome(以及在此之前的Firefox)处理要分析的音频源的方式发生了变化。

这是有问题的代码。它应该可以正常工作,直到您删除处理音频路由的最后一部分的注释。

var audioElement = new Audio();
var clientId = "xxxxx";
var oReq = new XMLHttpRequest();
//oReq.onload = reqListener;
oReq.open("get", "http://api.soundcloud.com/tracks/194245583.json?client_id=" + clientId, true);
oReq.send();
oReq.onreadystatechange = function() {
  if (oReq.readyState != 4)  { return; }
  var serverResponse = JSON.parse(oReq.responseText);
  console.log(serverResponse);
  audioElement.src = serverResponse.stream_url + "?client_id=" + clientId;
  audioElement.autoplay = true;
  audioElement.preload = true;
};
/*var audioContext = new AudioContext();
var audioSource = audioContext.createMediaElementSource(audioElement);
var audioAnalyser = audioContext.createAnalyser();
var audioGain = audioContext.createGain();
audioGain.gain.value = 1.0;
audioSource.connect(audioAnalyser);
audioAnalyser.connect(audioGain);
audioGain.connect(audioContext.destination);*/

我最初在 Chromium 错误跟踪器 (https://code.google.com/p/chromium/issues/detail?id=462998) 上发布了一个错误/请求,但得到了一个答案,即从现在开始需要在标题中包含 CORS 才能分析(或通过 createMediaElementSource 调用)和 Soundcloud 以及我目前在网站上使用的喊叫流不提供。我总是可以使用 CORS 代理,但也许您知道一种解决方法,或者计划在今年的某个时候使用 CORS 标头,因为许多网站很快就会面临与我相同的问题?

谢谢。

添加一个:

audioElement.crossOrigin = "anonymous";

在设置源之前,在那里的某个地方,应该可以正常工作。

这是出于跨域安全原因,不太可能更改。 不确定SoundCloud等人是否正在计划CORS访问。

最新更新