【发布时间】:2015-12-14 14:25:52
【问题描述】:
我读到了这个 SoundCloud 的 API 错误,它在尝试流式传输曲目时返回 404 错误,即使“streamable”属性设置为 true。
我发现了有关该主题的其他一些问题(请参阅“Tracks for “The Hives” are not streaming via the api”或“Soundcloud API SC.stream (track not loading)”),但我想知道如何检测错误以及如何解决它。我尝试了一些try {} catch() {},但似乎无法检测到问题。
以下是一些背景信息:
我有一个 php 返回一个 JSON 数组,其中包含要播放的曲目列表。我的脚本一个接一个地读取数组,然后尝试播放当前的数组。一切正常,但是当返回 404 error 时,脚本结束,不会跳转到下一个曲目。好像我无法检测到这种问题。
这是管理流的 JavaScript 方法:
playTrack = function() {
// console.log('playTrack');
SC.get(
"/tracks/" + playlist[ now_playing ].sndc_id,
function(track, error) {
if (error) {
sendErrorReport(playlist[ now_playing ].id);
loadNext();
} else {
try {
SC.stream(
"/tracks/" + playlist[ now_playing ].sndc_id,
function(sound, error) {
sound_object = sound;
if (error || !sound_object) {
sendErrorReport(playlist[ now_playing ].id);
loadNext();
} else {
sound_object.play(
{
'from': parseInt(current_position),
'onfinish': function() {
current_position = 0;
updateCounter();
$('#radio-waveform-position').css( { 'opacity': '0', 'width' : '0%' } );
loadNext();
},
'onplay': function() {
$('#radio-like').removeClass('liked');
playing = true;
updateInfo();
},
'whileplaying': function() {
current_position = this.position;
$('#radio-waveform-position').css( { 'opacity': '1', 'width' : (100 * current_position / this.duration).toFixed(3) + '%' } );
},
'ondataerror': function() {
sendErrorReport(playlist[ now_playing ].id);
loadNext();
}
}
);
if ($('html').hasClass('touch') || !autoplay) $('#radio-play-pause').click();
}
}
);
} catch (err) {
sendErrorReport(playlist[ now_playing ].id);
loadNext();
}
}
}
);
}
对于这种“故障”轨道,SC.get 和 SC.stream“错误”返回参数似乎始终为空。如您所见,我尝试将所有内容包装在 try() {} catch() {} 中,但没有成功。另外,sound_object.play()ondataerror 方法被完全忽略。
可以在此处看到正在运行的脚本:http://foggetabout.it/
我读到有人找到了解决方法,但没有解释。有人知道如何解决吗?
【问题讨论】:
-
如果你使用这个 JS api,它仍然返回 404 吗?
http://connect.soundcloud.com/sdk-2.0.0.js -
我想我必须重写我的代码才能让它工作,如果我只是替换脚本(现在我加载
http://connect.soundcloud.com/sdk.js)应用程序会冻结而没有任何错误。我试试,谢谢。
标签: javascript soundcloud