Следующий эпизод в стиле Netflix для Exoplayer Leanback

Я работаю над приложением для Android TV, используя библиотеку Leanback. Мне удалось интегрировать VideoPlaybackActivty с помощью Exoplayer. Одним из моих требований является то, что когда до окончания текущего видео остается около 1 минуты, мне нужно сделать вызов Rest на сервер, чтобы получить следующее видео для воспроизведения, а затем я хотел бы показать миниатюру следующего видео в правом нижнем углу экран. Очень похоже на функциональность Netflix в следующем эпизоде, воспроизводимом в .....

Мой вопрос в том, как я могу узнать, что в видео осталась всего 1 минута. Кроме того, как я могу показать этот оверлей Play Next на экране? В настоящее время мой файл activity_videoplayback.xml выглядит следующим образом.

<?xml version="1.0" encoding="utf-8"?>

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextureView
        android:id="@+id/texture_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

    <fragment
        android:id="@+id/playback_controls_fragment"
        android:name="com.myapp.ui.playback.VideoPlaybackFragment"
        android:tag="@string/playback_tag"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        android:id="@+id/stream_progressbar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:indeterminateTint="@color/orange"
        android:visibility="gone" />

</merge>

Очень ценю помощь.


person magnolia    schedule 15.02.2021    source источник


Ответы (1)


В настоящее время ExoPlayer не предоставляет прослушиватель обновлений прогресса — указанная причина заключается в том, что он будет потреблять слишком много ресурсов ЦП, чтобы продолжать вызывать события прогресса. См. обсуждение средства отслеживания проблем ExoPlayer здесь и обратите внимание, что проблема считается закрытой в настоящее время (февраль 2021 г.):

https://github.com/google/ExoPlayer/issues/3980

Предлагаемый подход заключается в создании обработчика для опроса игрока и запроса текущей позиции с помощью player.getCurrentPosition().

Для полноты, если вы также просматриваете видео HTML5, например, в WebView, вы можете проверить длину видео, а затем использовать событие прогресса для проверки 1 секунды с конца - это «стандартный» HTML5 и javascript, поэтому следует работать с любым фреймворком, используя элемент видео HTML5.

Код может выглядеть примерно так:

const yourVideo = document.querySelector('yourVideoID');

//Create the event handler
function handleProgressEvent(event) {
    //Check if video has reached last 10 seconds
    if (yourVideo.currentTime > (yourVideo.duration - 10.0)) {
    // DO your work to prepare the next video here
    
    }
}

// Add the event listener to your video
yourVideo.addEventListener('progress', handleProgressEvent);
person Mick    schedule 15.02.2021
comment
Большое спасибо. Любая идея, как я могу добавить макет для маленького прямоугольного изображения (кнопки), которое будет всплывать в конце, показывая миниатюру следующего видео? - person magnolia; 16.02.2021
comment
ExoPlayer позволяет настраивать существующие элементы управления или добавлять новые: exoplayer.dev/ui-components.html - person Mick; 16.02.2021