为什么Chrome不使用SoundCloud API V3播放歌曲

时间:2016-02-25 15:19:42

标签: javascript google-chrome audio soundcloud soundmanager2

我正在尝试使用SoundCloud api流式播放歌曲,但显然它不会在Chrome中播放。但它适用于其他浏览器。

SC.initialize({
  client_id: '65243ec784b284f1d8a8f950312240fa',
  redirect_uri: 'http://example.com/callback'
});

SC.stream('/tracks/293').then(function(player) {
  player.play();
});

JSFIDDLE

是否有任何想法让它在Chrome中运行?

3 个答案:

答案 0 :(得分:1)

open Github issue上查看我的解决方案(为方便起见,下面粘贴了代码)。

如果使用SoundManager2,则在dom准备就绪时调用setup。

不是使用SoundCloud api的流函数,而是调用SC.get,然后使用SC.get('/users/711016/tracks').then(function(tracks) { var sound = soundManager.createSound({ id: 'mySound', url: tracks[0].stream_url + "?client_id=YOUR_CLIENT_ID", stream: true }); sound.play(); }); 在SoundManager中创建一个声音对象,从刚刚抓取的轨道传入stream_url。

public class TransferPickingActivityProduct extends Fragment implements DialogFragmentProducts.DFragmentListener, DialogInterface.OnDismissListener {

    private static final List<PackOperation> packsprod = new ArrayList<>();

    private LinearLayout listprod;

    @Override
    public void onDismiss(DialogInterface dialogInterface) {

        packsprod.size();

    }

    public void add(Picking pick, FragmentManager fragment, Long idProd) {

        DialogFragmentProducts dFragment = DialogFragmentProducts.newInstance("PRODUCTO", pick.getId(), idProd);
        dFragment.setTargetFragment(TransferPickingActivityProduct.this, 1);

        dFragment.show(fragment, "PRODUCTO");
    }

    @Override
    public void onFinishEditDialog(PackOperation packOperation) {
        //Fragment f = fragment;
        packOperation.save();
        packsprod.add(packOperation);
        //View v = f.getView();


    }
}

我想到你试图播放的曲目的api路线可能与我的不同。

答案 1 :(得分:0)

由于Chrome的Chrome版本,这是known compatibility issue。除了禁用Flash或使用不同版本的SDK以查看哪种版本适用于您的特定Chrome版本之外,您几乎无能为力。

答案 2 :(得分:0)

正如JAL所说,不幸的是,这已经知道并且似乎并没有解决问题。

相反,我建议使用他们的小部件API来创建自定义iFrame(如果需要,可以使其隐藏),然后使用.load()方法加载您想要的任何轨道或​​轨道。您可以阅读here

小部件API非常好用,因为它附带了许多非常有用的事件监听器,具体取决于您正在做什么。