Как реализовать seekTo() при использовании HLS с ExoPlayer

Я пытаюсь реализовать базовый радиоплеер, который может приостанавливать прямую трансляцию, перематывать ее назад, а затем снова перематывать вперед.

Я думаю, что эта функция должна изначально поддерживаться, начиная с версии 2.1 ExoPlayer.

Однако элементы управления перемоткой вперед и назад неактивны при потоковой передаче, хотя они работают при воспроизведении локального контента.

Вот как я создаю плеер:

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));

Кратко мой вопрос: как я могу перематывать HLS назад и вперед с помощью ExoPlayer?

Заранее спасибо.


person Micah Simmons    schedule 30.04.2017    source источник


Ответы (1)


Похоже, это ошибка, https://github.com/google/ExoPlayer/issues/87 это обсуждалось, и оно было закрыто. Но я не уверен, что он достиг версии v2, и, скорее, он может быть в версии для разработчиков, здесь

person Nevermore    schedule 02.05.2017
comment
Извините за мой запоздалый ответ. В своем вопросе я сказал, что считаю, что эта функция должна изначально поддерживаться в версии 2.1 ExoPlayer. Кроме того, в ссылке, которую я предоставил на примечания к выпуску версии 2.1, говорилось, что проблема 87 была реализована, и поскольку я использовал версию 2.4 ExoPlayer, эта функциональность должна была быть доступна. Ваше здоровье - person Micah Simmons; 14.05.2017