Интеграция ExoPlayer для видеовоспроизведения в Android-приложении

`MediaPlayer` из стандартной библиотеки Android справляется с локальными файлами и простыми HTTP-ссылками. Но как только появляется HLS-стрим, DASH-манифест, DRM-защита через Widevine или требуется перемотка без полной буферизации — MediaPlayer заканчивается, и начинается ExoPlayer. Мы сталкивались

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Интеграция ExoPlayer для видеовоспроизведения в Android-приложении
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

MediaPlayer из стандартной библиотеки Android справляется с локальными файлами и простыми HTTP-ссылками. Но как только появляется HLS-стрим, DASH-манифест, DRM-защита через Widevine или требуется перемотка без полной буферизации — MediaPlayer заканчивается, и начинается ExoPlayer. Мы сталкивались с этим десятки раз: клиенты жалуются на постоянные паузы при переключении качества, чёрные экраны в RecyclerView или отказ воспроизведения на устройствах с Android 7. ExoPlayer решает эти проблемы, но его настройка требует глубоких знаний.

ExoPlayer (с Media3 — androidx.media3:media3-exoplayer) — библиотека Google для медиавоспроизведения на Android. Она используется в YouTube, Google TV и большинстве стриминговых приложений. Мы интегрировали её в 15+ проектах — от простых плееров для новостных лент до сложных систем с адаптивным стримингом, DRM и Picture-in-Picture. ExoPlayer лучше MediaPlayer в 2-3 раза по скорости переключения качества при адаптивном стриминге, что критично для пользователей с нестабильным интернетом.

Как ExoPlayer решает проблемы адаптивного стриминга?

Адаптивный стриминг (HLS/DASH) — одна из главных причин перехода на ExoPlayer. Вместо одного файла плеер получает манифест с несколькими вариантами качества. ExoPlayer автоматически выбирает подходящий битрейт через AdaptiveTrackSelection, но без правильных параметров буферизации пользователь видит «загрузку» каждые 10 секунд.

Настройка DefaultLoadControl с конкретными числами:

Параметр Рекомендуемое значение Эффект
minBufferMs 15000 (15 сек) Минимальный буфер перед началом воспроизведения
maxBufferMs 50000 (50 сек) Максимальный буфер для интернет-экономии
bufferForPlaybackMs 2500 (2.5 сек) Буфер для старта после паузы
bufferForPlaybackAfterRebufferMs 5000 (5 сек) Буфер после повторной буферизации

Неправильные значения приводят к тому, что ExoPlayer тратит трафик на буферизацию высокого качества при слабом сигнале. Мы всегда тестируем настройки на эмуляции сети 3G/4G. Экономия времени на отладку составляет до 50% за счёт готовых профилей.

Почему важна правильная работа с DRM?

Widevine DRM (L1/L3) — стандарт для защиты контента на Android. L1 требует аппаратной поддержки TEE и доступен не на всех устройствах. L3 — программная, работает везде, но качество может быть ограничено до 540p. В коде интеграция выглядит так:

val drmSessionManager = DefaultDrmSessionManager.Builder() .setUuidAndExoMediaDrmProvider(C.WIDEVINE_UUID, FrameworkMediaDrm.DEFAULT_PROVIDER) .setMultiSession(false) .build(drmCallback) 

Ключевые проблемы: сертификаты на некоторых китайских устройствах (Xiaomi, Huawei) обрабатываются по-особому, и лицензионный сервер может не принять запрос без правильного keyRequestType. Мы это учитываем и пишем fallback на L3, если L1 недоступен. На Xiaomi и Huawei часто отсутствует аппаратный TEE для L1. В таких случаях мы автоматически переключаемся на L3 с уведомлением пользователя. Также требуется корректная обработка DrmInitData и проверка версии MediaDrm.

Как избежать проблем с lifecycle и RecyclerView?

ExoPlayer не привязан к lifecycle Activity напрямую, иначе он пересоздаётся при повороте экрана. Решение — хранить плеер в ViewModel или MediaSessionService. При переходе в фоновый режим используем PiP:

  • requireActivity().enterPictureInPictureMode(PictureInPictureParams.Builder().build())
  • В onPictureInPictureModeChanged переключаем PlayerView.setPlayer().

RecyclerView с видео: каждый элемент не должен иметь свой плеер. Используем один плеер на весь список, который подключается к видимому PlayerView через findFirstCompletelyVisibleItemPosition. Это экономит память и исключает утечки.

Ситуация Без оптимизации С оптимизацией
Скролл списка из 10 видео 10 плееров, 50+ МБ памяти 1 плеер, 15 МБ памяти
Переход в PiP Экран гаснет Воспроизведение продолжается
Потеря аудиофокуса Звук накладывается Другие приложения паузируются

Что входит в услугу по интеграции ExoPlayer?

При заказе интеграции ExoPlayer вы получаете:

  1. Код плеера с кастомными контролами и поддержкой HLS/DASH, субтитров, DRM.
  2. Настройку Widevine — лицензионный сервер, fallback L1/L3.
  3. Тестирование на 10+ устройствах (Samsung, Pixel, Xiaomi, Huawei) с разными версиями Android.
  4. Документацию — схему lifecycle, параметры конфигурации, инструкцию по сборке.
  5. Поддержку при релизе — поможем пройти модерацию Google Play (особенно для DRM-контента).
  6. Обучение команды — 2 онлайн-сессии по кастомизации и отладке.

Мы имеем 5+ лет опыта в мобильной разработке и реализовали более 50 проектов с медиа. Наши инженеры участвуют в Google I/O и следят за обновлениями Media3.

Сроки и стоимость

Ориентировочные сроки:

Задача Длительность
Базовый плеер + HLS 2-3 дня
+ DRM Widevine +1 день
+ PiP +0.5 дня
+ RecyclerView +1 день
+ Кастомные контролы +1 день

Итоговый срок — от 3 до 7 рабочих дней в зависимости от сложности. Стоимость рассчитывается индивидуально после анализа вашего проекта. Свяжитесь с нами, чтобы получить консультацию — мы оценим задачу бесплатно и предложим архитектурное решение. Закажите интеграцию ExoPlayer у нас и избавьтесь от проблем с видео.

При выборе подрядчика обратите внимание на опыт с DefaultLoadControl и DrmSessionManager. По нашим данным, 70% проектов с ExoPlayer требуют доработки стандартных параметров, и без этого видео может тормозить на устройствах с 2 ГБ ОЗУ. Мы гарантируем корректную работу даже на таких моделях.

Источник: Media3