2015-06-20 183 views
1

我有一个音乐网络应用程序,可以响应移动应用程序。我无法在chrome或Safari浏览器中使用soundcloud streaming在iphone上工作。Soundcloud mp3无法通过Chrome流式传输iphone应用程序

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

soundcloud error

我测试过这首歌确实是我的客户端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> 

控制器/服务:

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'); 
      } 
      }); 

它工作在网络浏览器精细,所以我必须为手机浏览器失去了一些东西。

回答

1

要在移动设备上播放音频/视频,您需要直接与用户交互的物理和同步SC.stream()函数是异步的,因此打破了播放的一个要求。

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

如果你不知道应该播放的所有歌曲,那么你只剩下两个甚至更挑剔的选项。首先,我相信你可以通过jQuery ajax选项SC.stream()SC.get()这将允许您通过提供以下选项{ async: false }使请求同步 *不寒而栗*。

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

+0

非常感谢。我最终做了第一个工作。我希望Soundcloud不会生气,我非常想sc.stream,但这确实使它适用于移动设备。 '//为解决移动流式传输问题而努力 angular.forEach($ scope.filteredShows,function(value,index){0} {0} {0} –

相关问题