Интеграция видеоплеера в мобильное приложение на Flutter
Hola, Amigos! Меня зовут Вова Зевеке, я Flutter-разработчик в Amiga. Решил поделиться здесь историей о интеграции видеоплеера в мобильное приложение. Передо мной стояла задача — сделать возможность смотреть видео с YouTube.
Мы подключили пакет youtube_player_flutter, и кажется, задача решена. Но не всё так просто, появилась проблема — буферизация видео занимала очень много времени.
Мы переключили у контроллера видеоплеера флаг «autoPlay» в состояние «true». Видео перестало буферизоваться, и время ожидания загрузки видео сильно уменьшилось. Однако возникла новая проблема: с включенным флагом «autoPlay» видео нельзя ни промотать, ни поставить на паузу, можно только переключать полноэкранный режим.
Казалось, это тупик, ограничения пакета не позволяли решить задачу. Начали копаться в пакете и обнаружили, что у контроллера при включенном «autoPlay» остаётся возможность воздействовать на поле controller.value. Сделав отдельный метод, который ставил контроллеру настройки playerState: PlayerState.paused, isPlaying: false, нам удалось добиться возможности ставить видео на паузу даже с включенным «autoPlay». Но редактировать плеерную кнопку «играть/пауза» мы всё ещё не могли, поэтому сделали свою.
Позже мы столкнулись с проблемой проматывания видео. Воспользовались тем, что у контроллера можно задавать флаг «startAt». Он определяет, с какого момента видео начинает проигрываться. На основе этого сделали метод, который пересоздает плеер с новой точкой старта видео при попытке проматывания видео.
В итоге постепенно мы заменили весь интерфейс видеоплеера своим, спрятав старый. Получился всё тот же плеер, что и дефолтный YoutubePlayer, но с куда меньшей задержкой загрузки видео. Вынесли все изменения в форк репозитория пакета.
Пишите в комментариях, интересны ли вам такие истории? И делитесь своими интересными случаями из практики)