Picture-in-Picture в iOS: полная интеграция встроенного плеера
Picture-in-Picture (PiP) — это системная функция iOS, которая позволяет воспроизводить видео в отдельном плавающем окне поверх других приложений. Для пользователя это удобство, а для разработчика видеосервиса — отдельный механизм со своей инфраструктурой, жизненным циклом и набором ограничений. В эт

Picture-in-Picture (PiP) — это системная функция iOS, которая позволяет воспроизводить видео в отдельном плавающем окне поверх других приложений. Для пользователя это удобство, а для разработчика видеосервиса — отдельный механизм со своей инфраструктурой, жизненным циклом и набором ограничений. В этой статье мы разберём интеграцию PiP как встроенного плеера: от первого запуска до переключения контента, поделимся нюансами, с которыми вы точно столкнётесь на практике, и покажем, как обойти типовые грабли.
Как работает PiP в iOS: от истоков до современных реалий
Picture-in-Picture появился в iOS 9 для iPad, а на iPhone — только в iOS 14. Изначально функция была доступна только для системного плеера и ограниченного числа сторонних приложений, но с выходом iOS 15 Apple открыла API для всех разработчиков. С тех пор PiP стал неотъемлемой частью видеосервисов, мессенджеров и браузеров.
Встроенный плеер на основе AVPlayerViewController поддерживает PiP «из коробки», но для полноценной интеграции нужно правильно настроить аудиосессию, обработку переходов между состояниями и управление контентом. В противном случае пользователь столкнётся с проблемами: видео не сворачивается, звук пропадает или контент не переключается.
Предыстория и контекст
Развитие PiP неразрывно связано с ростом популярности видеоконтента на мобильных устройствах. Пользователи хотят одновременно смотреть видео и общаться в мессенджерах, работать с документами или листать ленту соцсетей. Apple ответила на этот запрос, предоставив разработчикам мощный инструмент, но он требует глубокого понимания жизненного цикла приложения и особенностей работы с аудиосессией.
До появления PiP разработчики использовали собственные реализации мини-плееров, но они не могли работать за пределами приложения. Системный PiP изменил правила игры: теперь видео продолжает воспроизводиться даже в фоновом режиме, что накладывает дополнительные требования к управлению ресурсами и обработке событий.
Какие ограничения есть у PiP в iOS?
Начнём с главного: PiP не работает в фоновом режиме без специальной настройки. Если ваше приложение не воспроизводит аудио, система может приостановить видео при сворачивании. Чтобы этого избежать, нужно настроить аудиосессию с категорией playAndRecord или playback, а также активировать фоновый режим для аудио в настройках проекта.
Второе ограничение — размер окна PiP фиксирован и зависит от ориентации устройства. На iPhone в портретной ориентации окно занимает около трети экрана, в альбомной — больше. Управлять этим размером нельзя, поэтому контент должен корректно масштабироваться.
Третье: PiP автоматически скрывается, если пользователь долго не взаимодействует с ним. Это поведение нельзя отключить, но можно обрабатывать соответствующее уведомление, чтобы приостановить воспроизведение или показать элементы управления.
Технические детали: настройка аудиосессии и жизненный цикл PiP
Для корректной работы PiP необходимо выполнить три ключевых шага. Во-первых, настроить аудиосессию: категория должна быть playback, а режим — moviePlayback. Это гарантирует, что звук продолжит воспроизводиться при переходе в фоновый режим. Во-вторых, включить фоновый режим для аудио в capabilities проекта. В-третьих, реализовать делегат AVPlayerViewControllerDelegate и обработать методы, связанные с началом и завершением PiP.
Жизненный цикл PiP включает несколько состояний: возможно (willStartPictureInPicture), активен (didStartPictureInPicture), восстановление (willStopPictureInPicture) и завершение (didStopPictureInPicture). Каждое из них требует обработки: например, при переходе в PiP нужно сохранить позицию воспроизведения, а при восстановлении — восстановить состояние плеера.
Как переключать контент в PiP?
Переключение контента — одна из самых сложных задач. Если пользователь хочет сменить видео, не выходя из PiP, нужно обновить текущий AVPlayer. Для этого можно использовать метод replaceCurrentItem(with:), который заменяет текущий элемент на новый. Однако есть нюанс: если новый контент имеет другой формат или требует другого уровня буферизации, возможны задержки.
Мы рекомендуем подготавливать новый элемент заранее, используя AVQueuePlayer для создания очереди. Это позволяет переключать контент без остановки воспроизведения. Также важно учитывать, что при переключении может измениться соотношение сторон, и окно PiP автоматически подстроится.
Кого затронет и как
Разработчики видеосервисов — главные бенефициары правильной интеграции PiP. Они получают возможность удерживать пользователя в приложении даже тогда, когда он переключается на другие задачи. Это повышает время просмотра и вовлечённость. Для пользователей PiP — это удобство, которое стало стандартом де-факто.
В российском контексте PiP особенно важен для онлайн-кинотеатров, которые конкурируют за внимание аудитории. Например, ivi, Kion и другие сервисы активно используют PiP для фонового просмотра. Однако из-за особенностей российского рынка — например, необходимости поддержки офлайн-просмотра — разработчики сталкиваются с дополнительными сложностями.
Что будет дальше
Apple продолжает развивать PiP: в iOS 17 появились новые возможности для интерактивных элементов в окне PiP, а в iOS 18 ожидается улучшенная поддержка переключения контента. Вероятно, мы увидим более гибкие настройки размера окна и расширенную интеграцию с другими системными функциями, такими как Live Activities.
Для разработчиков это означает, что нужно следить за обновлениями и адаптировать свои решения. Особенно важно тестировать PiP на разных версиях iOS, так как поведение может отличаться.
Итог
Picture-in-Picture — это мощный инструмент для повышения вовлечённости пользователей, но его интеграция требует внимания к деталям. Правильная настройка аудиосессии, обработка жизненного цикла и переключение контента — три кита, на которых держится стабильная работа PiP. Следуя описанным рекомендациям, вы сможете избежать типовых ошибок и предоставить пользователям бесшовный опыт просмотра. Следите за обновлениями Apple, чтобы оставаться на передовой.