Был ли опыт работы с видеостримингом

Ответ

Да, работал с видеостримингом через 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), чтобы контент защитить от пиратов. И, конечно, как сделать фоновое воспроизведение и правильно управлять аудиофокусом, чтобы твой плеер не перебивала какая-нибудь дурацкая реклама из другого приложения. В общем, полный спектр услуг, от «просто включить» до «ёб твою мать, как это вообще работает».