ExoPlayer r1.5.12到2.7.3迁移

时间:2018-04-26 00:35:16

标签: android exoplayer2.x

目前我正在使用版本r1.5.12使用自定义UriDataSource从InputStream播放MP3文件。我想升级到2.7.3版,但我不确定哪个类替换了ExtractorSampleSource,或者是否可以在下面的代码中重用名为myDataSource的自定义UriDataSource类:

int rendererCount=1;

ExoPlayer exoPlayer= ExoPlayer.Factory.newInstance(rendererCount);

/*check if file is present or not*/

File file=new File(getCacheDir(),"sample.mp3"); // location of file in the root directory of SD Card named "sample.mp3"

/*instantiate myDataSource*/
DataSource dataSource=new myDataSource(this);

ExtractorSampleSource extractorSampleSource=new ExtractorSampleSource(Uri.parse("sample.mp3"),dataSource,new DefaultAllocator(64*1024),64*1024*256);
TrackRenderer audio=new MediaCodecAudioTrackRenderer(extractorSampleSource, MediaCodecSelector.DEFAULT,null,true);

/*prepare ExoPlayer*/
exoPlayer.prepare(audio);
exoPlayer.setPlayWhenReady(true);

1 个答案:

答案 0 :(得分:2)

要使用ExoPlayer 2播放带有自定义数据源的MP3,您可以执行以下操作:

CustomDataSourceFactory dataSourceFactory = new CustomDataSourceFactory();

File file = new File(getCacheDir(), "sample.mp3");
ExtractorMediaSource mediaSource =
    new ExtractorMediaSource.Factory(dataSourceFactory)
    .createMediaSource(Uri.fromFile(file));

player.prepare(mediaSource);
player.setPlayWhenReady(true);

然后使用CustomDataSourceFactory创建数据源:

public class CustomDataSourceFactory implements DataSource.Factory {
  @Override
  public DataSource createDataSource() {
    return new CustomDataSource();
  }
}

v1 DataSource移植到v2应该很容易。唯一的变化似乎是添加了getUri()方法。

除此之外:我不确定您的自定义实现实际上在做什么。要只从缓存目录中播放文件,您应该能够在不需要自定义数据源的情况下执行此操作:

DefaultDataSourceFactory dataSourceFactory =
    new DefaultDataSourceFactory(this, Util.getUserAgent(this, "exo-demo"));
File file = new File(getCacheDir(), "sample.mp3");
ExtractorMediaSource mediaSource =
    new ExtractorMediaSource.Factory(dataSourceFactory)
    .createMediaSource(Uri.fromFile(file));

player.prepare(mediaSource);
player.setPlayWhenReady(true);