Інтеграція AVPlayer для відеовідтворення в iOS-додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція AVPlayer для відеовідтворення в iOS-додатку
Середній
~2-3 дні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція AVPlayer для відтворення відео в iOS-застосунку

AVPlayer — нативний плеєр iOS з підтримкою HLS, MPEG-4, progressive download, AirPlay, Picture in Picture та субтитрів. Перш ніж використовувати сторонні плеєри (VLCKit, IJKPlayer), варто розібратися, що вміє AVPlayer — у більшості випадків цього достатньо.

Базова інтеграція

AVPlayer сам по собі не відображає відео — він керує відтворенням. Для відображення потрібен AVPlayerLayer, вбудований у UIView.layer, або 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, враппер над AVPlayerViewController.

Де з'являються проблеми

Буферизація та стан. player.currentItem?.status не відбиває готовність до відтворення в реальному часі. Правильний шлях — KVO на player.currentItem та timeControlStatus:

player.publisher(for: \.timeControlStatus)
    .receive(on: DispatchQueue.main)
    .sink { status in
        switch status {
        case .playing: hideLoader()
        case .waitingToPlayAtSpecifiedRate: showLoader()
        case .paused: break
        }
    }

HLS та якість. Для HLS (m3u8) AVPlayer автоматично вибирає потік за пропускною здатністю. Керувати вибором можна через AVPlayerItem.preferredPeakBitRate (обмеження) або AVPlayerItem.preferredMaximumResolution. Ручний вибір якості — через AVMediaSelectionGroup з AVAssetVariant.

Фоновое відтворення. Аудіопотік при переході застосунку в фон вимагає: увімкнену capability «Background Modes → Audio, AirPlay» в Xcode та AVAudioSession.shared.setCategory(.playback) перед player.play(). Без setCategory аудіо обрізається одразу при переході в фон.

Picture in Picture. AVPictureInPictureController вимагає AVPlayerLayer або AVPlayerViewController. Додайте AVPictureInPictureControllerDelegate, у Info.plistUIBackgroundModes: audio. Увімкніть pictureInPictureController.startPictureInPicture() по натисканню кнопки. PiP працює лише на фізичних пристроях, не в симуляторі.

Кастомні елементи управління

Якщо AVPlayerViewController не підходить за дизайном, будуємо кастомний плеєр на основі AVPlayer + AVPlayerLayer:

  • Прогрес-бар: player.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.5), queue: .main) для оновлення позиції
  • Перемотка: player.seek(to: CMTime(seconds: targetSeconds, preferredTimescale: 600), toleranceBefore: .zero, toleranceAfter: .zero)toleranceBefore/After: .zero дає точну позицію, але повільніше
  • Субтитри: AVMediaCharacteristic.legible + AVPlayerItem.select(_:in:) для переключення доріжок

Що входить у роботу

  • Інтеграція AVPlayer з AVPlayerLayer або AVPlayerViewController
  • Кастомний UI управління (play/pause, seek bar, fullscreen)
  • Фоновое відтворення та AirPlay
  • Picture in Picture (якщо потрібен iOS 14+)
  • HLS з можливістю вибору якості
  • Обробка помилок мережі та буферизації з retry-логікою

Строки

Базовий плеєр із системними контролами: половина дня. Повністю кастомний плеєр з субтитрами, PiP та HLS quality selector: 2–3 дні. Вартість розраховується індивідуально.