This post is also available in: Английский
Одна из задач, с которой вы можете столкнуться http://kakielekarstva.ru/ при разработке приложения для Android — это встраивание видео плеера в приложение, для воспроизведения видео контента. Стандартный SDK предоставляет два пути решения этой проблемы: использовать низкоуровневый класс MediaPlayer или готовый визуальный компонент VideoView совместно со стандартной панелью управления воспроизведением MediaController. Оба эти подхода обладают своими недостатками, поэтому мы решили разработать собственный видеокомпонент AVideo. В этой статье мы расскажем о том как его использовать в своем приложении и какие преимущества он дает.
Сначала немного о недостатках стандартных классов. Класс MediaPlayer в силу своей низкоуровневости обладает максимальными возможностями, но весьма сложен в использовании, поэтому его не рекомендуется использовать напрямую. Специально для того, чтобы спрятать от разработчика всю сложность MediaPlayer, в SDK входит класс VideoView. Простейшая программа, использующая VideoView и MediaController выглядит примерно так:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mVideo = (VideoView) findViewById(R.id.videoView); MediaController controller = new MediaController(this); mVideo.setMediaController(controller); mVideo.setVideoURI(Uri.parse(STREAM_URL)); mVideo.start(); }
Но класс VideoView подходит только для простейших применений. Если вы захотите добавить в него какую-либо новую функциональность или даже просто сменить оформление элементов панели управления, то сделать это будет не просто, поскольку в SDK не предусмотрено такой возможности. Разработчику остается только реализовать собственный компонент на основе MediaPlayer с нуля или вырезать из находящихся в открытом доступе исходных кодов Android нужные компоненты и внести в них необходимые изменения. Именно так мы и решили поступить при разработке собственного плеера AVideo. В результате получился набор видео классов, совместимых по интерфейсу со стандартными, но реализующий дополнительно следующую функциональность:
- Измененное оформление элементов панели управления воспроизведением видео.
- Управление уровнем звука и кнопка выключения звука.
- Управление уровнем яркости подсветки экрана.
- Корректная работа компонента и контролов при встраивании в сложный layout, когда видео занимает только часть экрана.
- Переключение между обычным режимом отображения в layout-е и полноэкранным режимом по двойному нажатию на плеер с изменением размера элементов панели управления.
- Остановка воспроизведения и восстановление воспроизведения с запомненной позиции при отключении экрана устройства и при выходе из приложения.
Использовать наши видео компоненты в собственном приложении очень просто. Загрузите архив, содержащий код компонентов и пример использования, с сайта github.com. Импортируйте проекты из архива в рабочую область Eclipse и подключите их к своему приложению как библиотеки (Свойства проекта, Android, Library, Add…). Код простейшего видеоплеера с использованием этих компонентов получится абсолютно такой же, как если бы вы использовали стандартные компоненты, единственное, что изменится — это строки импорта соответствующих классов и к названию компонента VideoView в файле layout-а добавится наш package
1 | ru.denivip.android.video |
. Пример простейшего layout-а будет выглядеть так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/videoContainer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="10">
<ru.denivip.android.video.VideoView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/videoView" android:layout_width="match_parent"
android:layout_height="match_parent">
</ru.denivip.android.video.VideoView>
</FrameLayout>
Кроме того, для корректного восстановления позиции воспроизведения при выходе из приложения или при повороте экрана, рекомендуется также добавить свойство
1 | android:configChanges="orientation" |
к вашей activity и следующий Java-код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 @Override
protected void onPause() {
super.onPause();
mVideo.suspend();
}
@Override
protected void onResume() {
super.onResume();
mVideo.resume();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Результат работы тестового приложения в обычном и в полноэкранном режиме вы можете видеть на скриншотах:
Мы надеемся, что наш видеокомпонент пригодится вам в работе, и ждем багрепорты, предложения и пожелания по реализации новой функциональности, а также патчи.