ExoVideoView основан на ExoPlayer.
Что есть в ExoVideoView
Самый простой способ начать использовать ExoVideoView — добавить его как зависимость Gradle. Необходимо убедиться, что у вас есть репозитории jitpack, включённые в файл build.gradle в корне вашего проекта:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Затем добавьте зависимость компиляции Gradle в файл build.gradle модуля вашего приложения:
implementation 'com.github.JarvanMo:ExoVideoView:2.1.6'
Объявите ExoVideoView в файле макета следующим образом:
<com.jarvanmo.exoplayerview.ui.ExoVideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="300dp"/>
ExoVideoView предоставляет встроенный Player
для удобства, поэтому мы можем воспроизвести видео следующим образом:
SimpleMediaSource mediaSource = new SimpleMediaSource(url);//uri также поддерживается
videoView.play(mediaSource);
videoView.play(mediaSource,where);//воспроизведение с определённой позиции
Передаём плеер извне в ExoVideoView:
videoView.setPlayer(player);
Примечание: не забывайте освобождать ExoPlayer:
videoView.releasePlayer();
Подробности см. в демо.
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. Управление полноэкранным режимом такое же, как и управление ориентацией.
Сначала переопределите 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()
.
ExoVideoView также предоставляет встроенный селектор мультикачества. Селектор мультикачества будет добавлен в overlayFrameLayout
, если мультикачество включено и ExoMediaSource
имеют разные качества в текущей версии.
List<ExoMediaSource.Quality> qualities = new ArrayList<>();
ExoMediaSource.Quality quality =new SimpleQuality(quality,mediaSource.url());
qualities.add(quality);
mediaSource.setQualities(qualities);
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);
Чтобы настроить внешний вид ExoVideoPlaybackControlView в приложении, полезно определить собственный файл exo_video_playback_control_view.xml. Также можно настроить макет для одного экземпляра в файле макета. Это достигается путём установки атрибута controller_layout_id на ExoVideoPlaybackControlView. В результате указанный макет будет развёрнут вместо кода exo_video_playback_control_view.xml только для того экземпляра, на котором установлен атрибут.
app:controller_layout_id="@layout/my_controller"
Иногда нам могут не нравиться кнопки «Назад». Давайте спрячем их:
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 )