Блог

Как на самом деле работает фоновое воспроизведение YouTube на iOS

talavo5 мин. чтения

Одно из первых, что люди пробуют в talavo, — заблокировать телефон во время воспроизведения видео и с лёгким удивлением обнаружить, что аудио продолжает звучать. В стандартном iOS Safari этого бы не произошло. Вот что на самом деле происходит «под капотом» — потому что честная версия интереснее, чем «мы включили одну настройку».

Ограничение

talavo отрисовывает страницы в WKWebView — том же движке WebKit, который использует Safari и который является единственным браузерным движком, разрешённым Apple на iOS. WebKit намеренно агрессивно обращается с фоном: когда WKWebView уходит на задний план, система замедляет таймеры и приостанавливает медиаконвейер. Это отлично для батареи и ужасно для того, кто просто хочет, чтобы подкастоподобное видео продолжало играть при выключенном экране. Сам YouTube резервирует непрерывное фоновое воспроизведение для Premium.

Удержание конвейера живым

Трюк — не секретный флаг; это отказ давать медиасессии умереть. talavo перехватывает медиасессию страницы и, когда система пытается поставить воспроизведение на паузу при уходе в фон, удерживает базовый элемент «работающим», не давая WebKit его уничтожить. На практике это означает перехват паузы, навязанной ОС, и немедленное удержание элемента активным — при почти нулевой скорости воспроизведения, если нужно, — чтобы аудиоконвейер оставался тёплым и возобновлялся чисто, а не был утилизирован.

Кроме того, talavo привязывает стандартные iOS-элементы управления воспроизведением (экран блокировки, Пункт управления, AirPods) к активному видео, так что пауза, воспроизведение и перемотка работают как в нативном медиаприложении, а не как на веб-странице, которая просто случайно издаёт звук.

Плавающий мини-плеер

Фоновое аудио — это лишь половина истории. Вторая половина — плавающий мини-плеер: окно «картинки в картинке», которое отрывает видео и удерживает его воспроизведение, пока вы читаете что-то другое в другой вкладке, — без Premium-подписки. Это та же идея, что системный PiP, реализованная для любого видео, которое может воспроизводить talavo.

Честная оговорка

Это обходное решение поверх WebKit, а не приватный API. Это означает две вещи: оно остаётся в рамках того, что предоставляет веб-платформа, и может быть затронуто, если YouTube перестроит внутренности своего плеера. Когда это происходит, мы исправляем — именно это делает большинство точечных выпусков вроде тех, что есть в нашем changelog. Преимущество работы на реальном браузерном движке в том, что остальной веб продолжает работать нормально параллельно с этим.