Как переопределить позицию воспроизведения в MediaSessionConnector Exoplayer2? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть служба MediaBrowserServiceCompat, которая использует Exoplayer2 для воспроизведения списка ConcatenatingMediaSource мультимедийных файлов, как если бы они были одним файлом. Он использует MediaSessionConnector для подключения Exoplayer к MediaControllerCompat элементам управления воспроизведением, которые я использую в своем пользовательском интерфейсе через стандартный сеанс MediaBrowserCompat.

Поскольку я хочу, чтобы список воспроизведения файлов мультимедиа отображался как один бесшовный файл, я сам обрабатываю уведомление о позиции воспроизведения, добавляя продолжительность предыдущих окон к текущей позиции следующим образом:

private val updatesRunnable = Runnable {
    run {
        val currentPosition = mSimpleExoPlayer.currentPosition
        val windowIndex = mSimpleExoPlayer.currentWindowIndex
        val position = mOffsetsArray[windowIndex] + currentPosition
        val playbackStateBuilder = PlaybackStateCompat.Builder()
                .setState(PlaybackStateCompat.STATE_PLAYING, position, 0f)
        mMediaSessionCompat.setPlaybackState(playbackStateBuilder.build())
    }
    showUpdates()
}

Это в основном работает нормально, и мой пользовательский интерфейс показывает правильную позицию воспроизведения относительно всего списка воспроизведения, так что, например, если первый файл имеет длительность 1 минуту, второй файл отображается как начинающийся с "00:01 : 00 ", а не начинать снова с" 00:00:00 ".

Но пользовательский интерфейс также на мгновение показывает «00:00:00» всякий раз, когда Exoplayer перемещается к следующему объединенному файлу. Где-то MediaSessionConnector, по-видимому, сам устанавливает позицию воспроизведения MediaSessionCompat, и это противоречит позиции воспроизведения, которую я установил в исполняемом файле выше.

Как и где я могу получить MediaSessionConnector для обновления позиции воспроизведения, чтобы она относилась ко всем файлам в конкатенации, или, в качестве альтернативы, как и где я могу запретить MediaSessionConnector полностью обновлять позицию воспроизведения, чтобы я мог просто сделать это сам? Я попытался установить doMaintainMetadata на false, но это не останавливает обновление позиции MediaSessionConnector, как я и надеялся.

Моя проблема похожа на " Возможно ли иметь единую панель поиска для ConcatenatingMediaSource? ", но я не могу реализовать предоставленное там решение, потому что Я использую свой собственный пользовательский интерфейс, а не пользовательский интерфейс Exoplayer, поэтому я не могу использовать setShowMultiWindowTimeBar, который решает эту проблему на стороне клиента. Мне нужно решить проблему со стороны обслуживания, чтобы все игроки, присоединенные к сеансу (в идеале, включая игрока в панели уведомлений), отображали правильную позицию.

заранее спасибо

Джон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...