1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jarvanmo-ExoPlayerVideoView

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 01:36 f9013ea

ExoVideoView

ExoVideoView основан на ExoPlayer.

中文移步至此.

Демонстрация

demo

Планирование новых версий

Что есть в ExoVideoView

  1. Автоматическое управление AudioFocus.
  2. Автоматическое определение ориентации по датчику.
  3. Поддержка простых жестов.
  4. Поддержка нескольких качеств видео.
  5. Возможность добавления пользовательских представлений к контроллеру по умолчанию.
  6. Поддержка множественного режима изменения размера.
  7. Поддержка пользовательского контроллера.
  8. Возможность изменения видимости виджета по желанию.

Использование ExoVideoView

1. Зависимости

Самый простой способ начать использовать ExoVideoView — добавить его как зависимость Gradle. Необходимо убедиться, что у вас есть репозитории jitpack, включённые в файл build.gradle в корне вашего проекта:

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

Затем добавьте зависимость компиляции Gradle в файл build.gradle модуля вашего приложения:

implementation 'com.github.JarvanMo:ExoVideoView:2.1.6'

2. В макете

Объявите ExoVideoView в файле макета следующим образом:

<com.jarvanmo.exoplayerview.ui.ExoVideoView
     android:id="@+id/videoView"
     android:layout_width="match_parent"
     android:layout_height="300dp"/>

3. На Java

ExoVideoView предоставляет встроенный Player для удобства, поэтому мы можем воспроизвести видео следующим образом:

SimpleMediaSource mediaSource = new SimpleMediaSource(url);//uri также поддерживается
videoView.play(mediaSource);
videoView.play(mediaSource,where);//воспроизведение с определённой позиции

Передаём плеер извне в ExoVideoView:

videoView.setPlayer(player);

Примечание: не забывайте освобождать ExoPlayer:

videoView.releasePlayer();

Подробности см. в демо.

3. Управление ориентацией

ExoVideoVIew может автоматически обрабатывать свою ориентацию только тогда, когда ExoVideoVIew имеет ненулевой OrientationListener:

    videoView.setOrientationListener(orientation -> {
            if (orientation == SENSOR_PORTRAIT) {
                //сделать что-то
            } else if (orientation == SENSOR_LANDSCAPE) {
                //сделать что-то
            }
        });

Примечание: Когда ExoVideoView обрабатывает свою ориентацию автоматически, ExoVideoView вызовет activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) или activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); если context в контроллере является Activity. Управление полноэкранным режимом такое же, как и управление ориентацией.

4. Обратные события

Сначала переопределите onKeyDown:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return videoView.onKeyDown(keyCode, event);
        }
        return super.onKeyDown(keyCode, event);
    }

Затем передайте backListener в ExoVideoView:

    videoView.setBackListener((view, isPortrait) -> {
            if (isPortrait) {
              //сделать что-то
            }
            return false;
        });

Если возвращаемое значение равно true, операция будет прервана. В противном случае ExoVideoView самостоятельно обработает свою ориентацию и будет вызван OrientationLister.onOrientationChange().

Дополнительно

1. Мультикачество

ExoVideoView также предоставляет встроенный селектор мультикачества. Селектор мультикачества будет добавлен в overlayFrameLayout, если мультикачество включено и ExoMediaSource имеют разные качества в текущей версии.

        List<ExoMediaSource.Quality> qualities = new ArrayList<>();
        ExoMediaSource.Quality quality =new SimpleQuality(quality,mediaSource.url());
        qualities.add(quality);
        mediaSource.setQualities(qualities);

2. Режим отображения контроллера

ExoVideoPlaybackController разделены на четыре части:

1. Top
2. Top Landscape
3. Bottom
4. Bottom Landscape

Каждый из них можно скрыть или показать:


В Java можно добавить представления к ExoVideoPlaybackController.
```java
  videoView.addCustomView(ExoVideoPlaybackControlView.CUSTOM_VIEW_TOP, view);
  videoView.addCustomView(ExoVideoPlaybackControlView.CUSTOM_VIEW_TOP_LANDSCAPE, view);
  videoView.addCustomView(ExoVideoPlaybackControlView.CUSTOM_VIEW_BOTTOM_LANDSCAPE, view);

4. Указание пользовательского файла макета

Чтобы настроить внешний вид ExoVideoPlaybackControlView в приложении, полезно определить собственный файл exo_video_playback_control_view.xml. Также можно настроить макет для одного экземпляра в файле макета. Это достигается путём установки атрибута controller_layout_id на ExoVideoPlaybackControlView. В результате указанный макет будет развёрнут вместо кода exo_video_playback_control_view.xml только для того экземпляра, на котором установлен атрибут.

app:controller_layout_id="@layout/my_controller"

5. Изменение видимости

Иногда нам могут не нравиться кнопки «Назад». Давайте спрячем их:

videoView.changeWidgetVisibility(R.id.exo_player_controller_back,View.INVISIBLE);

Для других виджетов, которые вы можете скрыть или показать, см. IDS_IN_CONTROLLER.

Примечание: это опасная операция, потому что я не знаю, что произойдёт с пользовательским интерфейсом.

Прочее

  app:controller_background="@android:color/holo_orange_dark"
  app:use_artwork="true"
  app:default_artwork="@drawable/default_art"

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/jarvanmo-ExoPlayerVideoView.git
git@api.gitlife.ru:oschina-mirror/jarvanmo-ExoPlayerVideoView.git
oschina-mirror
jarvanmo-ExoPlayerVideoView
jarvanmo-ExoPlayerVideoView
master