在与ExoPlayer

时间:2017-04-30 12:16:20

标签: android hls exoplayer

我正在尝试实现一个基本的无线电播放器,它可以暂停直播,回放它然后再次快进。

我认为应该从ExoPlayer的版本2.1本机支持此功能。

但是,即使在播放本地内容时,回放和快进控件也会在流式传输时显示为灰色。

以下是我创建播放器的方式:

private void initExoPlayer(){

    Handler mHandler = new Handler();

    String userAgent = "userAgent";

    Uri uri = Uri.parse(urlSourceOfStream);

    dataSourceFactory = new DefaultHttpDataSourceFactory(
            userAgent, null,
            DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
            1800000,
            true);

    mediaSource = new ExtractorMediaSource(uri,dataSourceFactory, Mp3Extractor.FACTORY,
            mHandler, null);

     bandwidthMeter = new DefaultBandwidthMeter();

    trackSelectionFactory =
            new AdaptiveTrackSelection.Factory(bandwidthMeter); 

    trackSelector = new DefaultTrackSelector(trackSelectionFactory);

    loadControl = new DefaultLoadControl();
    exoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

    exoPlayer.prepare(mediaSource);

    ((SimpleExoPlayerView) findViewById(R.id.exoPlayer)).setPlayer(exoPlayer);

}

播放器可以成功暂停,并且它似乎正在缓存内容,因为我可以在播放器暂停几分钟后恢复播放。这也表明应该有一些缓存可以让我回放内容。

我也尝试过使用 OkHttpDataSourceFactory

OkHttpClient client = new OkHttpClient.Builder().cache(new Cache(getFilesDir() , 1000)).build();
OkHttpDataSourceFactory okHttpDataSourceFactory = new OkHttpDataSourceFactory(client, userAgent, null);

尝试像这样倒回播放器会让播放器从直播位置播放并且不会回放内容:

exoPlayer.seekTo(Math.max(exoPlayer.getCurrentPosition() - 1000, 0));

我的问题简而言之:如何使用ExoPlayer回放和快进HLS?

提前致谢。

1 个答案:

答案 0 :(得分:0)

看起来有一个bug,https://github.com/google/ExoPlayer/issues/87正在讨论这个问题,而且已经关闭了。但我不确定它是否已达到v2版本,而不是它可能在开发版中,here