Інтеграція 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