Багато розробників стикаються з ситуацією: додаток відтворює відео через AVPlayer, але кнопка AirPlay не з'являється, або підключення обривається без пояснення причин. У 30% проєктів ця проблема пов'язана з відсутністю AVRoutePickerView в інтерфейсі. AirPlay — це протокол, який використовується в мільйонах пристроїв Apple, і його підтримка критична для користувацького досвіду.
Ми реалізували AirPlay-стримінг у більш ніж 10 проєктах — від простих плеєрів до додатків з DRM та багатокімнатним звуком. Використовуючи перевірений підхід, заснований на AirPlay, ми скорочуємо час інтеграції до двох днів. Наша методологія дозволяє уникнути типових помилок, таких як відсутність моніторингу маршруту та ігнорування DRM-обмежень.
Основні проблеми та їх вирішення
-
Відсутність кнопки AirPlay — системна іконка в Control Center з'являється лише за умови
player.allowsExternalPlayback = true. Але щоб кнопка була прямо в інтерфейсі, потрібно додатиAVRoutePickerView. Без нього користувач змушений виходити з додатку для перемикання. -
Невідомість поточного маршруту — додаток не знає, що відео пішло на TV. Інтерфейс залишається без змін: кнопка повноекранного режиму активна, немає індикації мовлення. Це викликає плутанину. Виправляємо моніторингом
AVAudioSession.routeChangeNotification. - DRM-контент та сторонні пристрої — FairPlay працює лише на Apple TV. На AirPlay 2-сумісних телевізорах від LG або Sony відео з DRM не відтворюється. Користувач бачить чорний екран. Потрібно заздалегідь перевіряти підтримку FairPlay на пристрої.
Як додати кнопку AirPlay в інтерфейс?
AVRoutePickerView — системний компонент, який показує стандартний список доступних пристроїв. Жодних додаткових дозволів не потрібно. Згідно з офіційною документацією Apple, це рекомендований спосіб. Приклад налаштування:
let routePickerView = AVRoutePickerView() routePickerView.tintColor = .white routePickerView.activeTintColor = .systemBlue routePickerView.prioritizesVideoDevices = true // показує AirPlay-TV вище колонок Додаємо цей елемент прямо в UI плеєра — і кнопка AirPlay готова. Це втричі швидше, ніж кастомна реалізація.
Як моніторити підключення до AirPlay?
При зміні маршруту потрібно адаптувати інтерфейс: приховати кнопку розгортання, показати індикатор «Передається на...». Використовуємо сповіщення:
NotificationCenter.default.addObserver( forName: AVAudioSession.routeChangeNotification, object: nil, queue: .main ) { notification in guard let reason = notification.userInfo?[AVAudioSessionRouteChangeReasonKey] as? UInt, let changeReason = AVAudioSession.RouteChangeReason(rawValue: reason) else { return } switch changeReason { case .newDeviceAvailable: let outputs = AVAudioSession.sharedInstance().currentRoute.outputs let isAirPlay = outputs.contains { $0.portType == .airPlay } self.updateUIForAirPlay(isAirPlay) case .oldDeviceUnavailable: self.updateUIForAirPlay(false) default: break } } Прапорець player.isExternalPlaybackActive повідомляє, що відео зараз на зовнішньому екрані. При true — показуємо заглушку замість чорного екрану.
Чому AirPlay не працює з DRM-контентом?
AirPlay передає відео з DRM (FairPlay) лише на пристрої, сертифіковані Apple. Apple TV підтримує, а більшість сторонніх AirPlay-пристроїв — ні. Це обмеження протоколу, і обійти його не можна. У таких випадках необхідно або відключати AirPlay для захищеного контенту, або показувати повідомлення про помилку.
AirPlay 2 та налаштування аудіосесії
AirPlay 2 дозволяє відтворювати аудіо одночасно на кількох пристроях. Для підтримки в додатку достатньо встановити категорію AVAudioSession .playback або .playAndRecord. Система сама керує мультироутингом. Додаткового коду не потрібно.
Для коректної передачі аудіо разом з відео на AirPlay-пристрій використовуйте категорію .playback без опції .allowBluetoothA2DP. Якщо потрібно залишити аудіо на телефоні при відео на TV — задайте AVAudioSession.setCategory(.playback, options: [.allowAirPlay]) та налаштуйте preferredInput.
Порівняння AirPlay з альтернативами
| Параметр | AirPlay | Chromecast |
|---|---|---|
| Платформа | iOS/macOS | Android/Web |
| SDK | Вбудований в iOS | Google Cast SDK |
| DRM | FairPlay | Widevine |
| Легкість інтеграції | Висока (2–3 дні) | Середня (5–7 днів) |
Для кросплатформенних проєктів ми реалізуємо обидва протоколи. Також порівняємо способи інтеграції AirPlay:
| Спосіб | Складність | Час | Підтримка DRM |
|---|---|---|---|
| AVPlayer за замовчуванням | Низька | 0 днів | Так (тільки Apple TV) |
| AVRoutePickerView | Низька | 1 день | Так |
| Кастомний UI | Висока | 3–5 днів | Так |
Процес роботи та терміни
- Аудит поточного плеєра — перевіряємо використовувані технології та наявність проблем з AirPlay.
- Проєктування інтеграції — обираємо оптимальний підхід (AVRoutePickerView, кастомний UI або гібрид).
- Реалізація — додаємо кнопку, моніторинг маршруту, обробку помилок, заглушку для зовнішнього екрану.
- Тестування — на фізичних пристроях: Apple TV 4K, HomePod, LG TV (AirPlay 2).
- Деплой та супровід — публікація в App Store, підтримка нових версій iOS.
Базова інтеграція (кнопка + моніторинг + заглушка) — від 1 до 3 днів. Якщо потрібна підтримка DRM та AirPlay 2 — від 5 днів. Вартість розраховується індивідуально, виходячи зі складності коду. Оцінимо ваш проєкт за 24 години — просто зв'яжіться з нами.
Що входить в роботу
- Вихідний код інтеграції з коментарями
- Документація з конфігурації
- Тестовий білд для App Store Connect (TestFlight)
- Консультація з підготовки додатку до рев'ю App Store
- Гарантія на реалізацію до 3 місяців після здачі
Ми — команда з 10+ річним досвідом в iOS-розробці. Сертифіковані розробники Apple. Допоможемо реалізувати AirPlay так, щоб користувачі не помітили різниці з нативними додатками. Гарантуємо стабільну роботу на всіх підтримуваних пристроях.
Отримайте консультацію з інтеграції AirPlay у ваш додаток. Зв'яжіться з нами для оцінки проєкту.







