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
回调后触摸页面上的任意位置(甚至滚动)。大多数用户甚至不会意识到这是一项要求,因为在移动设备上滚动是很常见的事情。
我有一个允许移动使用的响应式音乐网络应用程序。我无法让 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
回调后触摸页面上的任意位置(甚至滚动)。大多数用户甚至不会意识到这是一项要求,因为在移动设备上滚动是很常见的事情。