Soundcloud mp3 无法通过 Chrome iphone 应用流式传输

Soundcloud mp3 not streaming through Chrome iphone app

我有一个允许移动使用的响应式音乐网络应用程序。我无法让 soundcloud 流式传输在 chrome 或 safari 浏览器中的 iphone 上工作。

歌曲加载(它加载曲目名称)但它只是像这样坐在那里:

我用我的客户端 ID 测试了这首歌确实是 mp3 ({"http_mp3_128_url":"https://cf-media.sndcdn.com/u8ouac3FqckU.128.mp3?).

什么可能导致歌曲无法在移动浏览器中播放?

支持它的代码是这样的:

<i class="fa fa-play falist" ng-click="player.play(show, $index)" ng-show="$index != trackPlayingIndex"></i>
            <i class="fa fa-pause falist" ng-click="player.pause(show, $index)" ng-show="$index == trackPlayingIndex"></i></span>

controller/service:

 SC.stream(track.properties.stream_url, function(sound){

          if (playingSound) {
           playingSound.stop();
         }

          sound.play({
            whileplaying: function () {
              player.duration = Math.floor(this.durationEstimate / 1000);
              player.position = Math.floor(this.position / 1000);
              player.progress = (this.position / this.durationEstimate) * 100;
              $rootScope.$broadcast('statusChanged', true);
            },
            onfinish: function () {
              $rootScope.$broadcast('finished');
            }
          });

它在网络浏览器中运行良好,所以我一定是缺少了一些适用于移动浏览器的东西。

要在移动设备上玩 audio/video,您需要与用户进行直接、物理和 同步 交互。 SC.stream() 函数是异步的,因此违反了播放的要求之一。

根据您的应用程序的工作方式,有一些糟糕的方法可以解决此问题。如果您知道应该在页面上播放的所有歌曲,您可以在页面加载时对每首歌曲调用 SC.stream(),然后仅在用户实际按下时在 sound 实例上调用 .play()播放按钮。

如果您不知道应该播放的所有歌曲,那么您还有两个更糟糕的选择。首先,我相信您可以将 jQuery ajax 选项传递给 SC.stream()SC.get(),这将允许您发出请求 同步 *不寒而栗* 提供以下选项 { async: false }.

最后一个选项是在 整个主体 上为 SC.stream() 回调函数中的 'ontouchstart' 事件设置一个事件侦听器。然后该事件侦听器将触发对 sound.play() 本身的调用。这意味着用户必须先按下播放按钮,然后在触发 SC.stream 回调后触摸页面上的任意位置(甚至滚动)。大多数用户甚至不会意识到这是一项要求,因为在移动设备上滚动是很常见的事情。