我正在尝试实现一个基本的广播播放器,可以暂停直播流,倒带,然后再快进。
我认为这个功能应该从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?
提前谢谢。

最佳答案

好像有个bug,https://github.com/google/ExoPlayer/issues/87正在讨论这个,它已经关闭了。但我不确定它是否达到了v2版本,而是可能在dev版本中,here

关于android - 在ExoPlayer中使用HLS时如何实现seekTo(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43706247/

10-12 02:35