Intereting Posts
Выравнивание макета стола Android Android – сохранить изображение в галерею Android 5.0 Lollipop – перезагрузка Nexus 10 и отладка USB не обнаружены? Как получить объект View, на котором была запущена анимация …? Как я могу опубликовать, чтобы воспроизвести x86 и ARM apks моего приложения для кордоны-кроссворда? Студия Android Где установить файл NDK? (Загрузите его в zip) Как написать уведомление, которое абсолютно ничего не делает при нажатии? Как вы скомпилируете проект Android в файл .apk в Eclipse без запуска эмулятора? Есть ли Android-эмулятор Google Glass? Android – Как получить Uri из необработанного файла? Регистрация GCM с двумя разными идентификаторами работы Когда отображается неопределенный прогресс, входящий в библиотеку поддержки Android Обратный вызов Ble scan вызывает только несколько раз, а затем останавливается Включить веб-камеру Android в эмуляторе Вызов startIntentSenderForResult из фрагмента (Android Billing v3)

Воспроизведение плейлиста ExoPlayer 2

Я использую новые функции от ExoPlayer 2.x, чтобы воспроизвести список аудиофайлов, таких как:

List<MediaSource> playlist = new ArrayList<>(); ... ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource( playlist.toArray(new MediaSource[playlist.size()])); mExoPlayer.prepare(concatenatedSource); mExoPlayer.setPlayWhenReady(true); 

Это работает нормально, но для того, чтобы обновить свой интерфейс, я должен знать, какой трек в данный момент играет, и ход этого трека. Есть ли слушатель из ExoPlayer?

Благодаря!

Solutions Collecting From Web of "Воспроизведение плейлиста ExoPlayer 2"

Таким образом, у меня есть аналогичный сценарий и нужно знать, когда начнется следующее видео в плейлисте. Я обнаружил, что ExoPlayer.EventListener имеет метод, называемый onPositionDiscontinuity() который onPositionDiscontinuity() каждый раз, когда видео изменяется или «ищет» следующего в onPositionDiscontinuity() воспроизведения.

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

Надеюсь, это поможет!

Изменить: изменение индекса, возвращаемого Exoplayer.getCurrentWindowIndex() является рекомендуемым способом обнаружения изменения элемента в MediaSource воспроизведения MediaSource .

 int lastWindowIndex = 0; // global var in your class encapsulating exoplayer obj (Activity, etc.) exoPlayer.addListener(new ExoPlayer.EventListener() { @Override public void onLoadingChanged(boolean isLoading) { } @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { } @Override public void onTimelineChanged(Timeline timeline, Object manifest) { } @Override public void onPlayerError(ExoPlaybackException error) { } @Override public void onPositionDiscontinuity() { //THIS METHOD GETS CALLED FOR EVERY NEW SOURCE THAT IS PLAYED int latestWindowIndex = exoPlayer.getCurrentWindowIndex(); if (latestWindowIndex != lastWindowIndex) { // item selected in playlist has changed, handle here lastWindowIndex = latestWindowIndex; // ... } } }); 

Вы можете реализовать следующее событие и обновить свой ui в соответствии с состоянием игрока.

  mExoPlayer.addListener(new ExoPlayer.Listener() { @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { if (playbackState == PlaybackStateCompat.STATE_PLAYING) { //do something } } @Override public void onPlayWhenReadyCommitted() { } @Override public void onPlayerError(ExoPlaybackException error) { mExoPlayer.stop(); } }); 

Имея мои ограниченные знания

Можете ли вы попытаться

 MediaPlayer.TrackInfo 

MediaPlayer.TrackInfo Подробности toString () должны предоставить вам необходимую вам информацию