无法在android

时间:2016-03-27 12:03:07

标签: android exoplayer

我正在尝试在android中实现Exoplayer来流式传输歌曲。这是我到目前为止所遵循的link

我的布局文件中有2个按钮,1个用于启动播放器,其他用于停止。

这是类文件

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    Button btPlay = (Button) findViewById(R.id.bt_play);
    Button btStop = (Button) findViewById(R.id.bt_stop);
    Context mContext = getBaseContext();
    String URL = "http://sound15.mp3slash.net/indian/tummile/tummile01(www.songs.pk).mp3";

    btPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse(URL);
            final int numRenderers = 2;
            SampleSource sampleSource = new FrameworkSampleSource(mContext, uri, null, numRenderers);
//above line gives me error

            TrackRenderer audioTrack = new MediaCodecAudioTrackRenderer(sampleSource);

            ExoPlayer exoPlayer = ExoPlayer.Factory.newInstance(numRenderers);
            exoPlayer.prepare(audioTrack);
            exoPlayer.setPlayWhenReady(true);
        }
    });

}

抛出的错误出现在SampleSource行上,上面写着

  

无法解析构造函数FrameworkSampleSource

如何处理此错误并继续播放歌曲。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

以适当的方式使用库: youtube video

使用ExtractorSampleSource

折旧FrameworkSampleSource

见下面的代码:

        String url = parentArray.getJSONObject(songIndex).getString("file");
        Uri uri = Uri.parse(url);
        player = ExoPlayer.Factory.newInstance(1);
        playerControl = new PlayerControl(player);
        DataSource dataSource = new DefaultUriDataSource(this, TAG);
        ExtractorSampleSource extractorSampleSource = new ExtractorSampleSource(uri, dataSource, new DefaultAllocator(64 * 1024), 64 * 1024 * 256);
        audioRenderer = new MediaCodecAudioTrackRenderer(extractorSampleSource, MediaCodecSelector.DEFAULT);
        player.prepare(audioRenderer);
        player.setPlayWhenReady(true);