Ответ
Да, работал с видеостримингом через ExoPlayer и Media3. Основные задачи:
- Настройка адаптивного стриминга (HLS, DASH)
- Кастомизация UI плеера
- Обработка ошибок сети/буферизации
- Оптимизация потребления батареи
Пример базовой реализации ExoPlayer:
val player = ExoPlayer.Builder(context).build()
playerView.player = player
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.play()
Также интегрировал стриминг WebRTC для видеозвонков. Знаю особенности работы с DRM (Widevine), фоновым воспроизведением и управлением аудиофокусом.
Ответ 18+ 🔞
А, видеостриминг? Ну, это ж моя родная стихия, ёпта. Работал с этим ExoPlayer'ом, а теперь ещё и с его новым воплощением — Media3. В общем, знаю эту кухню от и до.
Основные задачи, которые мне приходилось решать, это:
- Настройка адаптивного стриминга (HLS, DASH). Чтобы видео само подстраивалось под скорость интернета, а не тормозило, как пьяный ёжик в тумане.
- Кастомизация UI плеера. Ну, там кнопочки свои, прогресс-бар, чтобы не как у всех — стандартная внешность никого не ебёт.
- Обработка ошибок сети и буферизации. Это святое. Пользователь не должен видеть, что у него коннект хуйня, просто показываем ему крутилку и тихо материмся в логах.
- Оптимизация потребления батареи. Чтобы приложение не жрало аккум, как не в себя, особенно на дешёвых китайских телефонах.
Вот, смотри, базовый пример кода, с которого всё обычно начинается. Ничего сложного, но если накосячить — будет тебе хиросима, а не плеер.
val player = ExoPlayer.Builder(context).build()
playerView.player = player
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.play()
Ещё впиливал стриминг через WebRTC для видеозвонков — вот это уже весёлая тема, там свой геморрой с соединениями и задержками. Знаю все особенности работы с DRM (тот же Widevine), чтобы контент защитить от пиратов. И, конечно, как сделать фоновое воспроизведение и правильно управлять аудиофокусом, чтобы твой плеер не перебивала какая-нибудь дурацкая реклама из другого приложения. В общем, полный спектр услуг, от «просто включить» до «ёб твою мать, как это вообще работает».