MediaPlayer. Часть 2. Делаем видеопроигрыватель с VideoView.

В данном примере мы продолжим знакомство с возможностями работы с мультимедиа в Android. Это второй урок, посвященный компоненту MediaPlayer. Но в этот раз мы говорим о нем не напрямую. Тема нашего урока — воспроизведение видео с использованием компонента VideoView.

VideoView — это кастомный компонент, состоящий из двух элементов — MediaPlayer, который нужен для управления воспроизведением видео и SurfaceView — собственно поверхностью, на которой отображается видео.

Итак, перейдем к практике и создадим макет экрана.

android_videoview

Здесь все просто — компонент VideoView заполняет собой большую часть экрана. На всякий случай приведем код разметки интерфейса:

Файл activity_main.xml:

Теперь напишем базовый код активности, где получим ссылку на компонент VideoView:

Пока ничего особенного. Для хранения видеофайла также создайте в каталоге res еще один каталог raw и положите туда какой-нибудь файл. Вот как выглядит структура каталогов у меня:

android_videoview_1

Все же любят Raspberry Pi? 🙂

Итак, первое. Нашим проигрывателем надо как-то управлять. А так как одним из компонентов, входящих в VideoView, является MediaPlayer, то нам пригодится один полезный класс — так называемый MediaController.

MediaController — это компонент, который содержит все нужные кнопки для управления проигрывателем. Мы можем его создать программно и установить для нашего VideoView в качестве элемента управления:

Мы создаем новый объект MediaController и вызываем у него метод setAnchorView(), благодаря которому панель с элементами управления будет располагаться не на самом видео, а под ним.

Последним шагом устанавливаем наш контроллер для VideoView.

Компоненту VideoView нужно указать путь к воспроизводимому файлу. Это может быть адрес сетевого ресурса или локального. В нашем случае это локальный файл, который лежит в каталоге raw. Сначала нужно определить его идентификатор:

Теперь формируем полный путь к файлу:

Также добавим в наш класс еще одну переменную — position, которая будет обозначать текущую точку воспроизведения:

Далее мы установим два слушателя. Первый — OnPreparedListener(), содержит всего один метод — onPrepared(), который будет вызван тогда, когда видеофайл будет готов к воспроизведению.

При поворотах экрана информация о текущем месте воспроизведения теряется, поэтому между поворотами экрана эту информацию нужно сохранять. Данную логику мы реализуем чуть позже. Если значение переменной position равно нулю, то мы просто воспроизводим видео с самого начала.

Как вы заметили, данный метод принимает в качестве единственного параметра MediaPlayer. Для него то мы и реализуем второй слушатель — setOnVideoSizeChangedListener(). Зачем он нужен? Реализация данного интерфейса содержит всего один метод — onVideoSizeChanged(), который будет вызван при изменении размеров видео (например, вы захотите развернуть его на весь экран).

Выше я говорил о том, что поворачивая экран, удаляется информация о текущей позиции воспроизведения. В реальном приложении это конечно же нежелательно. Поэтому вы вручную должны позаботиться о сохранении позиции последней точки воспроизведения. Для этого просто переопределите методы onSaveInstanceState() и onRestoreInstanceState():

Итак, в методе onSaveInstanceState() мы сохраняем текущую позицию воспроизведения и останавливаем воспроизведение. В методе onRestoreInstanceState() мы получаем сохраненную информацию и перемещаемся к тому моменту, на котором мы остановили воспроизведение.

Любуемся полученным результатом:

android_videoview_2

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *