javascript - 100% HTML5 模式下的 SoundManager 卡在 "stalled"

标签 javascript html soundcloud samsung-smart-tv soundmanager2

在我的智能电视应用程序中,我通过跨域请求使用 SoundCloud API - $.getJSON()
该应用程序还在 100% HTML5 模式(无 Flash)上使用 SoundManager2 API 从从 SoundCloud 检索到的 .stream_url 加载轨道。尝试播放加载的轨道时问题就开始了。假设该应用加载了 10 首轨道,其中一些轨道无法播放。
我注意到日志说明:

0040  sound0: play(): Loading - attempting to play...
0041  sound0: abort
0042  sound0: waiting
0043  sound0: loadstart
0044  sound0: stalled 

它永远停留的地方。问题总是发生在相同的轨道上,而其他轨道是可流式传输和可播放的,显示日志:

0078  sound2: durationchange (191190)
0079  sound2: loadedmetadata
0080  sound2: stalled
0081  sound2: suspend
0082  sound2: loadeddata
0083  sound2: canplay
0084  sound2: onload()
0085  sound2: playing ♫

用于创建声音对象并播放它的代码:

        SoundObject = soundManager.createSound({    //  load the current track
            url: "https://api.soundcloud.com/tracks/" + TrackIDs[elements][index-1] + "/stream?client_id=f430822ab78177a5cfb94d572d9036a2",
            volume: 100,
            autoLoad:    true, 
            //autoPlay:      true,
            //stream:        true,
            whileplaying:function(){currentPosition=SoundObject.position;barWhilePlaying(elements, index, currentPosition);},                         
            onfinish:    function(){barOnFinish(elements, index);},                       
            onstop:      function(){barOnStop(elements, index);},
        });
        SoundObject.play();

(其中 whileplayingonfinishonstop 参数都调用一个函数来更改 css 和/或元素的类html 文档。)

我的问题:

  1. 有没有办法事先知道 SMsound 对象不会播放?
  2. 说我在加载它之前无法知道它会永远“loadstart”和“stall”,加载后有没有办法知道这一点?
    我问这个是因为一些轨道将在长时间后加载和播放。

最佳答案

我可以建议一个可能有帮助的解决方法。

var mySound = soundManager.createSound({..});  
mySound.load();  
setTimeout(function() {
    if (mySound.readyState == 1) {
        // this object is probably stalled
        }
},5500);

这是有效的,因为在 html5 中,与 flash 不同,readystate 属性几乎立即从“0”(未初始化 - 尚未加载)跳到“3”(已加载),跳过“1”(已初始化) - 开始加载),因为如果声音开始缓冲它可以在 html5 中播放,因此 readystate 返回 3...
在 html5 上,永久(或长时间)停滞的声音将在 load() 尝试后很长时间内拥有它们的 readystate = 1

之后 - 您可以替换/删除/跳过错误的轨道或其他任何内容。

  • 注意 - 5500 毫秒应该足够长,您可以尝试一下,看看什么是您平台的最佳超时时间。

希望对你有帮助。

关于javascript - 100% HTML5 模式下的 SoundManager 卡在 "stalled",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822669/

相关文章:

javascript - 检查日期在 Typescript 中是否有效?

javascript - 使用 React Native SDK 的方法返回 undefined

javascript - 从数组中创建表中的多行?

php - 在 SQL 记录集中使用 IF ELSE

soundcloud - Javascript SDK connect() 函数在 chrome 中不起作用

尽管用户有轨道,SoundCloud API 仍返回 0 首轨道

javascript - Google Closure Library 最好/更稳定的特性是什么

HTML/CSS - 没有得到滚动

带淡入淡出的 JavaScript 图像 slider

javascript - 处理来自 SoundCloud Widget 的 JS 事件