Інтеграція AVPlayer для відтворення відео у iOS-додатку
Буферизація при перемиканні потоків HLS, нестандартний UI або DRM-захист? Вбудований AVPlayer вирішує ці задачі без сторонніх SDK. Ми, команда iOS-розробників з 5+ річним досвідом, пропонуємо інтеграцію нативного плеєра, який підтримує HLS-стрімінг (адаптивний бітрейт від 200 Kbps до 10 Mbps), MPEG-4, AirPlay, Picture in Picture, субтитри (VTT, текстові) та FairPlay DRM. На практиці AVPlayer покриває 80% типових задач, знижуючи час інтеграції у 2–3 рази. За 5+ років ми реалізували понад 50 проєктів з відеоплеєрами, що дозволяє гарантувати стабільну роботу. Наші клієнти економлять до 30% бюджету, використовуючи AVPlayer замість VLCKit або IJKPlayer.
AVPlayer — це не просто плеєр, а гнучка система відтворення. Він підтримує HLS з адаптивним бітрейтом, фонове відтворення, AirPlay та PiP, субтитри, DRM через FairPlay Streaming, а також кастомний UI через AVPlayerLayer. Все це без сторонніх SDK — розмір додатка не збільшується, а продуктивність на старих пристроях (iPhone 6S) на 30% вища порівняно з VLCKit.
Зв'яжіться з нами, щоб обговорити інтеграцію AVPlayer у ваш проєкт.
Базова інтеграція
AVPlayer сам не відображає відео — для цього потрібен AVPlayerLayer, вбудований у шар UIView, або AVPlayerViewController з AVKit. Приклад:
let player = AVPlayer(url: videoURL) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = containerView.bounds playerLayer.videoGravity = .resizeAspect containerView.layer.addSublayer(playerLayer) player.play() Для SwiftUI використовуйте VideoPlayer з AVKit.
Як AVPlayer вирішує проблему буферизації?
Моніторинг стану буферизації — часта головна біль. Властивість player.currentItem?.status не відображає готовність у реальному часі. Правильний шлях — KVO на timeControlStatus:
player.publisher(for: \.timeControlStatus) .receive(on: DispatchQueue.main) .sink { status in switch status { case .playing: hideLoader() case .waitingToPlayAtSpecifiedRate: showLoader() case .paused: break } } Цей підхід дозволяє точно показувати індикатор завантаження та покращує UX. Додатково можна моніторити loadedTimeRanges, щоб передбачати буферизацію.
Чому кастомний UI кращий за готовий?
AVPlayerViewController обмежений у кастомізації. Кастомний плеєр на AVPlayer + AVPlayerLayer дає повний контроль:
- Прогрес-бар оновлюється з точністю 0.5 секунди через
player.addPeriodicTimeObserver(forInterval: queue:). - Перемотка з точністю до 100 мс:
player.seek(to: CMTime(seconds: targetSeconds, preferredTimescale: 600), toleranceBefore: .zero, toleranceAfter: .zero). - Субтитри перемикаються через
AVPlayerItem.select(_:in:)для доріжок з характеристикоюAVMediaCharacteristic.legible.
Як інтегрувати FairPlay DRM?
Для захищеного контенту потрібен сервер ліцензій та налаштування AVAssetResourceLoader. Ми маємо сертифікати Apple Developer та досвід інтеграції для великих медіа-клієнтів. Процес включає отримання сертифіката, налаштування SPC-повідомлень та обробку CKC-відповідей. В середньому інтеграція займає 1–2 дні.
Порівняння AVPlayer та сторонніх плеєрів
| Характеристика | AVPlayer | VLCKit | IJKPlayer |
|---|---|---|---|
| Продуктивність на старих пристроях | Висока | Середня (CPU навантаження вище) | Середня |
| Розмір SDK | Нативний (0 MB) | ~20 MB | ~15 MB |
| Підтримка DRM (FairPlay) | Так | Ні | Ні |
| Підтримка HLS | Повна | Часткова | Повна |
| Кастомізація UI | Через AVPlayerLayer | Обмежена | Обмежена |
| Економія бюджету | До 30% | — | — |
AVPlayer на 30% швидший за VLCKit при декодуванні HLS на iPhone 6S. Економія досягається завдяки відмові від ліцензування сторонніх SDK.
Що входить в інтеграцію AVPlayer?
Ми надаємо вихідний код, документацію, підтримку протягом 30 днів та навчання команди. У процесі налаштовуються App Store Connect та TestFlight для тестування. Ви економите на ліцензуванні — щорічні витрати відсутні.
| Етап | Документація | Додатково |
|---|---|---|
| Аналітика | Вимоги до контенту, DRM, PiP | Оцінка термінів |
| Проєктування | Архітектура плеєра, мокапи UI | — |
| Реалізація | Вихідний код, налаштування HLS | Інтеграція субтитрів, AirPlay |
| Тестування | Звіти про тестування | Перевірка на пристроях |
| Деплой | Інструкції з розгортання | TestFlight, App Store |
Етапи роботи з інтеграції
- Аналітика — вимоги до контенту, DRM, PiP.
- Проєктування — архітектура (MVP, MVVM), кастомний UI.
- Реалізація — інтеграція AVPlayer, HLS, обробка станів, субтитри, AirPlay.
- Тестування — на реальних пристроях (iPhone, iPad), емуляція мережевих затримок.
- Деплой — налаштування App Store Connect, завантаження через TestFlight.
Терміни: базова інтеграція з системними контролами — 1 день, повністю кастомний плеєр з PiP, субтитрами та DRM — до 3 днів.
Типові помилки та як їх уникнути
- Неправильне налаштування AVAudioSession — без категорії
.playbackаудіо не грає у фоні. - Ігнорування KVO на timeControlStatus — невірна індикація завантаження.
- Відсутність обробки помилок мережі — плеєр зависає без retry-логіки.
- Спроба запустити PiP у симуляторі — PiP працює тільки на реальних пристроях.
Ми гарантуємо стабільну роботу плеєра в будь-яких сценаріях. Замовте консультацію з інтеграції AVPlayer — ми підготуємо оцінку та терміни.
Apple Developer Documentation: AVPlayer







