Полный список
MediaPlayer – класс, который позволит вам проигрывать аудио/видео файлы с возможностью сделать паузу и перемотать в нужную позицию. MediaPlayer умеет работать с различными источниками, это может быть: путь к файлу (на SD или в инете), адрес потока, Uri или файл из папки res/raw.
Напишем небольшое приложение аудио-плеер и используем в нем все эти возможности.
Project name: P1261_MediaPlayer
Build Target: Android 2.3.3
Application name: MediaPlayer
Package name: ru.startandroid.develop.p1261mediaplayer
Create Activity: MainActivity
Добавляем строки в strings.xml:
Так это выглядит на экране
Кнопки верхнего ряда запускают проигрывание треков из различных источников. Кнопки среднего ряда – это пауза, возобновление, стоп и чекбокс повторения трека. А в нижнем ряду кнопки перемотки назад/вперед и вывод в лог текущей информации.
Создайте папку res/raw и положите в нее какой-нить звуковой файл с именем explosion.mp3. Например, его можно скачать здесь — http://dl.dropboxusercontent.com/u/6197740/explosion.mp3.
Разбираемся. Сначала создаем константы-пути, которые будет использовать проигрыватель. Это файл в инете (DATA_HTTP), поток в инете (DATA_STREAM), файл на флэшке (DATA_SD) и Uri на мелодию из системы (DATA_URI). Для SD и Uri укажите ваши значения, чтобы такие файлы существовали. (По получению Uri в конце урока есть вспомогательный код)
В onCreate получаем AudioManager, находим на экране чекбокс и настраиваем так, чтобы он включал/выключал режим повтора для плеера.
onClickStart – метод для обработки нажатий на кнопки верхнего ряда. Сначала мы освобождаем ресурсы текущего проигрывателя. Затем в зависимости от нажатой кнопки стартуем проигрывание. Какие методы для этого используются?
setDataSource – задает источник данных для проигрывания
setAudioStreamType – задает аудио-поток, который будет использован для проигрывания. Их существует несколько: STREAM_MUSIC, STREAM_NOTIFICATION и п. Подробнее их можно посмотреть в доках по AudioManager. Предполагаю, что созданы они для того, чтобы можно было задавать разные уровни громкости, например, играм, звонкам и уведомлениям. Этот метод можно и пропустить, если вам не надо явно указывать какой-то поток. Насколько я понял, по умолчанию используется STREAM_MUSIC.
Далее используется метод prepare или prepareAsync (в паре с OnPreparedListener). Эти методы подготавливают плеер к проигрыванию. И, как понятно из названия, prepareAsync делает это асинхронно, и, когда все сделает, сообщит об этом слушателю из метода setOnPreparedListener. А метод prepare работает синхронно. Соотвественно, если хотим прослушать файл из инета, то используем prepareAsync, иначе наше приложение повесится, т.к. заблокируется основной поток, который обслуживает UI.
Ну и метод start запускает проигрывание.
В случае с raw-файлом мы используем метод create. В нем уже будет выполнен метод prepare и нам остается только выполнить start.
Далее мы для плеера включаем/выключаем повтор (setLooping) в зависимости от текущего значения чекбокса. И вешаем слушателя (setOnCompletionListener), который получит уведомление, когда проигрывание закончится.
В методе releaseMP мы выполняем метод release. Он освобождает используемые проигрывателем ресурсы, его рекомендуется вызывать когда вы закончили работу с плеером. Более того, хелп рекомендует вызывать этот метод и при onPause/onStop, если нет острой необходимости держать объект.
В методе onClick мы обрабатываем нажатия на кнопки управления проигрывателем. Какие здесь используются методы?
start – возобновляет проигрывание
seekTo – переход к определенной позиции трека (в милисекундах)
getCurrentPosition – получить текущую позицию (в милисекундах)
getDuration – общая продолжительность трека
isLooping – включен ли режим повтора
getStreamVolume – получить уровень громкости указанного потока
Далее идут методы
onPrepared – метод слушателя OnPreparedListener. Вызывается, когда плеер готов к проигрыванию.
onCompletion – метод слушателя OnCompletionListener. Вызывается, когда достигнут конец проигрываемого содержимого.
В методе onDestroy обязательно освобождаем ресурсы проигрывателя.
В манифесте добавляем права на интернет — android.permission.INTERNET.
Все сохраняем, запускаем приложение. Дизайн получившегося плеера, конечно, не ахти какой :), но нас сейчас интересует функционал.
Еще раз перечислю возможные действия. Нажимая верхние кнопки, мы запускаем проигрывание из различных источников. Кнопки среднего ряда позволят нам поставить паузу, возобновить/остановить проигрывание и включить режим повтора. Кнопки нижнего ряда перематывают назад/вперед на 3 сек (3000 мсек) и выводят инфу в лог.
Я включу проигрывание файла с SD и выведу инфу в лог (кнопка Info).
start SD
Playing true
Time 4702 / 170588
Looping false
Volume 10
Проигрывание идет, текущая позиция – 4-я секунда из 170, режим повтора выключен, громкость — 10.
Уменьшу громкость (кнопками устройства или эмулятора), включу режим повтора (чекбокс Loop), поставлю паузу (кнопка Pause) и снова выведу инфу в лог:
Playing false
Time 46237 / 170588
Looping true
Volume 6
Видим, что проигрывание остановилось, текущая позиция уже 46 секунд, режим повтора включен, а громкость уменьшилась до 6.
Теперь включу проигрывание потока (кнопка Stream). Смотрим лог:
08:49:13.799: D/myLogs(18805): start Stream
08:49:13.809: D/myLogs(18805): prepareAsync
08:49:27.589: D/myLogs(18805): onPrepared
Обратите внимание, сколько прошло времени с начала (prepareAsync) до завершения (onPrepared) подготовки проигрывателя – 14 секунд. Если бы мы использовали метод prepare, а не prepareAsync, то наше приложение было бы недоступно все это время.
Расскажу еще про несколько методов, которые я не использовал в примере, но о которых стоит знать.
Метод reset – сбрасывает плеер в начальное состояние, после него необходимо снова вызвать setDataSource и prepare. Похож на onRelease, но позволяет продолжить работу с этим же объектом. А вот после onRelease надо создавать новый объект MediaPlayer.
Метод setOnBufferingUpdateListener устанавливает слушателя буферизации проигрываемого потока. По идее слушатель будет получать процент буферизации, но у меня оно как-то странно работает — показывает или 0 или 100.
Метод setOnErrorListener устанавливает слушателя для получения ошибок. Особенно это полезно при методe prepareAsync. Если в ходе этого метода возникнут ошибки, то их можно поймать только так.
Метод setWakeMode позволяет ставить стандартную (PowerManager.WakeLock) блокировку на время проигрывания, указав тип блокировки. Не забудьте в манифесте добавить права на WAKE_LOCK.
По поводу видео. Метод setDisplay позволяет указать плееру, куда выводить изображение. Размещаете на экране компонент SurfaceView (вкладка Advanced), вызываете его метод getHolder и полученный объект передаете в setDisplay. Плеер выведет изображение на этот компонент.
Чтобы узнать размер проигрываемого изображения можно использовать методы getVideoHeight и getVideoWidth.
В хелпе класса MediaPlayer есть хорошая схема состояний плеера. Она кажется запутанной, но если посидеть и поразбираться, то вполне можно все понять. Схема полезная, советую вникнуть.
А здесь можно посмотреть какие форматы поддерживаются системой.
Также хелп любезно предоставляет нам код, который позволит просмотреть существующие медиа-файлы в системе:
На следующем уроке:
— работаем с SoundPool
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Путеводитель по видеоплеерам для Android, часть 1
Вслед за обзором аудиоплееров речь пойдет о проигрывателях видео. Смартфоны и планшеты становятся все более привлекательными для просмотра HD-видео, поэтому особое внимание будет уделено настройкам аппаратного и программного декодирования.
Аспекты обзора:
- Поддержка форматов видео (при наличии данных, в ином случае все зависит от установленных кодеков и прошивки Android), а также форматов аудио
- Управление библиотекой: импорт файлов, поиск, доступные разделы
- Настройка видео: аппаратное и программное декодирование
- Поддержка встроенных и внешних субтитров, настройка их отображения
- Интерфейс и навигация: удобство, настройка внешнего вида, поддержка жестов
- Другие функции: интернет-трансляция, синхронизация и другие
Участники обзора:
- MX Player
- BSPlayer
- Video Player Lite
- VLC for Android
- HD Video Player
- Wondershare Player
MX Player
MX Player отлично зарекомендовал на Google Play, лидируя с максимальным рейтингом при количестве установок более 500 млн раз.
Ключевые возможности MX Player: поддержка аппаратного ускорения, встроенный декодер, многоядерная обработка; а также удобное масштабирование, поддержка жестов и даже «защита от неосторожных действий со стороны детей». Вообще говоря, функций и настроек очень много, существует подробная документация для плеера — правда, только на английском языке.
Форматы, поддерживаемые MX Player: 3gp, avi, divx, f4v, flv, mkv, mp4, mpeg, mov, vob, wmv, webm, xvid и другиe. Поддерживается большое количество форматов субтитров, включая ssa, sub, srt, ass — как внешних, так и встроенных.
На ходу можно переключать аудиодорожку или менять режим декодирования, настройки кодека. Другие опции сосредоточены в меню «Инструменты → Настройки». Они разделены на секции «Воспроизведение», «Экран», «Субтитры» и, собственно, «Инструменты». В параметрах декодера можно переключиться между программным и аппаратным методами, в зависимости от того, какой метод эффективнее на определенной прошивке Android или устройстве.
В MX Player удобен файловый менеджмент. В частности, доступен фильтр: отображение папок, в которых находятся файлы читаемых форматов. Возможен просмотр последних файлов, в списке они отображаются альтернативным цветом.
Интерфейс MX Player задуман так, что его практически и не видно. При запуске видео кнопки не отображаются, и нужно коснуться экрана, чтобы увидеть элементы управления. Впрочем, есть даже темы оформления.
Плеер поддерживает жесты: вертикальный слайд справа — для регулировки звука, слева — для настройки яркости, проигрывание в фоне — при длительном нажатии на Play. Наиболее примечательно то, как в MX Player происходит навигация по видеофайлу: она практически мгновенна — в то время как в других проигрывателях для перехода нужно отпустить ползунок.
Доступны 2 версии MX Player: в бесплатной присутствует реклама. По функциональности отличий от платной редакции нет.
[+] тонкая настройка аппаратного декодирования
[+] стабильная работа
[+] множество настроек видео
[+] поддержка жестов
[+] мгновенный переход по временной шкале
BSPlayer
BSPlayer — видеоплеер, созданный разработчиками известного настольного приложения. Аналогично MX Player, позволяет задействовать оптимизацию через аппаратное ускорение. В данном случае речь также идет о 2- и 4-ядерном декодировании. Уточнение: на некоторых моделях HTC и Samsung Galaxy S2 наблюдаются проблемы с воспроизведением.
Медиатека BS Player — это навигатор со списком недавно просмотренных и популярных файлов, доступом к памяти телефона. Для отображения файлов можно настроить вывод только известных типов. Форматы мультимедиа, воспроизводимые BS Player: avi, divx, flv, mkv, mov, mpg, mts, mp4, m4v, rmvb, wmv, 3gp, mp3 и ac3. Читает нескольких аудиодорожек и наиболее известные форматы субтитров — ssa/ass, srt, sub. Для субтитров задаются настройки: язык, цвет, кодировка.
В дополнение к этому, в медиатеке есть вкладка LAN, откуда доступно потоковое воспроизведение (RTMP, RTSP, MMS, HTTP). Из этого раздела осуществляется воспроизведение файлов через Wi-Fi или источники с предоставленным доступом (внешний USB-накопитель, SMB/CIFS, ПК, NAS-серверы).
Возвращаясь к функциям проигрывания — здесь примечательны следующие особенности. Первое — в настройках имеются опции, относящиеся как к аппаратному, так и программному декодированию. Второе — можно указать кодек для воспроизведения.
Интерфейс поддерживает темы оформления. Жесты при навигации стандартны: свайп — настройка яркости и громкости, длинное нажатие — воспроизведение по времени, короткое — пауза, фоновое воспроизведение при длительном нажатии кнопки «Назад» и т. д.
Помимо бесплатной версии, доступна платная ($6,80) — с расширенной функциональностью, поддержкой Chromecast и без рекламы.
[+] Аппаратное и программное декодирование
[+] Интуитивный файловый менеджер
[+] Сетевое воспроизведение
[+] Поддержка популярных форматов видео и субтитров
Video Player Lite
Video Player Lite воспроизводит популярные форматы видео, включая rmvb, avi, flv, mp4, mkv, 3g2, 3gp, 3gp2, 3gpp, iso, mov, mpeg (версий 1—4), mpv2, mts, mtv, ogx, rm, ts, tts, vob, wm, wmv и другие, изначально поддерживаемые ОС Android. Используется аппаратное декодирование и оптимизация — разработчик обещает, что при невысоком расходе памяти воспроизведение будет плавным — за счет «адаптации плеера под каждый формат».
При первом запуске плеер сканирует память телефона и выдает список файлов, доступных для чтения (вкладка «Видео»). Также можно перейти в каталог и самостоятельно добавить файлы в медиатеку. Кроме того, ролики можно искать через историю или поиск.
Рядом с названием файла отображается его продолжительность и разрешение. Среди имеющихся команд в контекстном меню есть два любопытных пункта — «Воспроизвести как аудио» и «Воспроизвести с начала» (по умолчанию Video Player Lite запоминает позицию при закрытии окна с воспроизводимым видео).
Интерфейс плеера прост, в особенности минималистичный экран воспроизведения (без привычной панели с кнопками), никаких настроек внешнего вида не предусмотрено. Оболочка адаптируется под размеры экрана, и при ландшафтном отображении файлы выстраиваются в несколько колонок — что особенно удобно при использовании планшета.
Аппаратное декодирование включается через настройки приложения, при этом никаких опций — в отличие от того же MX Player — пользователю не предоставляется. Есть некоторые параметры, относящиеся к производительности (формат цветности, пропуск кадров). Так или иначе, стандартные ролики, снятые в 1080p, могут воспроизводиться с задержкой, и решить проблему непосредственно через Video Player Lite не удастся. Касательно онлайн-видео — подобная функция так и не была найдена в плеере, хотя в описании на Google Play упоминание о ней есть.
Что касается поддержки субтитров, точной информации о совместимых форматах нет. А проблемы с их отображением имеются: например, встроенные субтитры vob-файла не отобразились.
Зато музыку Video Player Lite воспроизводит без проблем при добавлении файлов через встроенный навигатор или поиск.
[−] нельзя создавать плейлисты
[−] требовательность к аппаратной части
[−] отсутствие ключевых настроек
[+] простой интерфейс медиатеки
[+] аппаратное декодирование
VLC for Android (beta)
VLC для Android поддерживает те же форматы, что и широко известный медиаплеер для настольной платформы (см. таблицу). На момент обзора плеер находился в статусе beta, поэтому возможны проявления нестабильности (хотя по ходу тестирования проблем у нас не возникло). Некоторые функции только планируются к реализации. Например, до недавних пор стриминг не поддерживался по причине «юзабилити и производительности», однако сейчас VLC работает с протоколом HLS (HTTP Live Streaming), позволяет просматривать интернет-трансляции.
На первом этапе VLC выполняет стандартную процедуру — сканирует устройство в поисках файлов мультимедиа и добавляет их в список навигатора. Интерфейс последнего типичен по своему устройству: разделы «Видео», «Аудио», «Каталоги», а также «История». Есть поиск — вполне отзывчивый, ведется с учетом истории.
Экран воспроизведения максимально прост: кнопки управления воспроизведением доступны в центре, также можно узнать время и заряд батареи. Что касается управления, то жесты поддерживаются, можно ознакомиться с «раскладкой» при первом запуске видео. Раскладка эта, опять же, привычна для большинства мобильных плееров. Таким образом удобно управлять воспроизведением, громкостью, яркостью, масштабировать видео. Через контекстное меню переключается звуковая дорожка и активируются субтитры — встроенные или внешние.
VLC предусматривает аппаратное и программное декодирование (на устройствах с Android 4.3 и выше рекомендуется использовать последний вариант), многоядерное декодирование (актуально для процессоров Cortex-A7, A9 и A15). Налажена работа со внутренними и внешними устройствами — к примеру, можно выбрать альтернативный режим вывода для аудио или видео, подключить другой экран.
Как аудиоплеер, VLC хотя и «скромен», но вполне работоспособен: возможен просмотр музыкальной библиотеки по альбомам, исполнителям, композициям, жанрам. Для настройки звука предназначен 10-полосный эквалайзер с предустановками.
[+] Поддержка аудио и видео
[+] Онлайн-трансляция
[+] Потоковое воспроизведение
[+] Оптимизация декодирования
HD Video Player
Из главных особенностей HD Video Player, перечисленных на Google Play — воспроизведение HD-видео и автоопределение видеофайлов на телефоне. Форматы, поддерживаемые плером: avi, m4v, mp4, wmv, flv, mpeg, mpg, mov, rm, vob, asf, mkv, f4v, ts, tp, m3u, m3u8.
Библиотека состоит из 3 секций-вкладок: локальное видео (Local Video), список ранее открытых файлов (Recent Video) и папка с видео (Video Folder). В последней секции отображаются каталоги, в которых содержится видео, совместимое с проигрывателем.
Файловый навигатор поддерживает базовые операции — удалить, переименовать, опубликовать. Помимо размера и названия файла, дополнительной информации не предоставляется — поэтому, скажем, нельзя узнать разрешение видео.
Что касается функций проигрывания, то возможности плеера стандартны: навигация, изменение яркости, громкости, масштабирование с помощью жестов. После закрытия видео HD Video Player запоминает позицию и при повторном открытии начинает воспроизведение с того же места.
Пожалуй, главная проблема этого плеера — отсутствие настроек. В этой связи с заявленной поддержкой HD возникают проблемы: видео подтормаживает на вполне типичной конфигурации, а изменить аппаратные или программные настройки не представляется возможным.
[+] Работает «как есть»
[−] Отсутствие настроек
[−] Нестабильная работа
Wondershare Player
Wondershare Player — проигрыватель с фокусом на сетевых возможностях: имеется поддержка сетевых протоколов HTTP, MMS, RTMP, RTSP/RTP и M3U8. Благодаря поддержке UPnP/DLNA, можно просматривать видео на различных устройствах, реализована передача файлов по Wi-Fi. M3U8-стриминг будет интересен владельцам iOS-устройств.
Контент можно искать на YouTube, Vevo и других площадках — в том случае, если доступ к ним не заблокирован по региону. Также Wondershare Player позволяет просматривать видео с новостных и развлекательных ресурсов вроде CNN, NY Times, Ted Talk, NASA TV, Funny и Die. Скорее всего, данные функции будут интересны только изучающим английский язык, а в целом для русскоязычного сегмента пользы от них мало.
Некоторые функции (например, синхронизация) привязаны к настольным продуктам компании Wondershare — Wondershare Player, AllMyTube, Video Converter Ultima.
Воспроизведение локальных файлов также не оставлено без внимания. Плеер сканирует память устройства, добавляет файлы в список Local. Можно обратиться к ранее открытым файлам, аналогично онлайн-закладкам, искать видео.
Среди поддерживаемых форматов — flv, avi, mkv, wmv, mov, rm, rmvb, asf, m2ts, mp3, wma, aac, flac, m2ts, vob, f4v, 3gp. Что касается субтитров, то в наличии поддержка ssa/ass, smi/sami, srt, sub/txt и др.
Отчасти порадовали настройки: для каждого из форматов можно указать вид декодирования — аппаратное или программное. Тем не менее, плеер не всегда работает стабильно: может «выпадать» даже при открытии директории с неподдерживаемыми форматами — видимо, это как-то связано с обработкой эскизов.
[+] Широкая поддержка сетевых протоколов
[+] Выбор метода декодирования
[−] Привязка к англоязычным сервисам
[−] Нестабильная работа
Заключение
MX Player раскрывает свой потенциал при воспроизведении файлов высокого разрешения. Кроме того, что скорость воспроизведения на высоте, пользователю предоставлена свобода настройки параметров производительности. При изобилии доступных функций пользоваться плеером удобно, поскольку интерфейс не отвлекает, позволяя сосредоточить внимание на изображении.
BSPlayer примечателен тем, что поддерживает аппаратное ускорение и работает с сетевыми протоколами, тем самым позволяя смотреть потоковое видео без загрузки видеофайлов на устройство.
Video Player Lite — достаточно простой видеоплеер с поддержкой стандартных форматов медиа, но без поддержки сетевых протоколов. Отсутствуют важные настройки (субтитры, оптимизация). Будет подходящим решением, если нужен видеоплеер с простым интерфейсом и медиатекой.
VLC для Android — медиаплеер с широкой поддержкой форматов видео, аудио и возможностью просмотра онлайн-трансляций. Не содержит ничего лишнего, но в то же время в программе присутствуют важные настройки (например, декодирования). Учитывая текущий статус плеера, «beta», можно ожидать, что VLC составит конкуренцию известным решениям за счет наращивания функциональности и более гибкой конфигурации.
Рекомендовать HD Video Player можно только для просмотра несложных видеороликов (без надобности в субтитрах или переключении звуковой дорожки). Название свое проигрыватель фактически не оправдывает.
Wondershare Player интересен сетевыми возможностями: это интернет-трансляция и синхронизация с другими устройствами. Плеер, однако, не полностью раскроет свой потенциал — ввиду региональных особенностей. Локальное воспроизведение, в целом, не вызывает нареканий (за исключением редких «падений» программы).
Источник