Розробка додатку для перегляду 360°-панорам на iOS та Android

Клієнти очікують від 360°-панорам не просто картинку, а повноцінне занурення — плавне відео, живі переходи та інтерактив. Ми розробляємо мобільні застосунки для iOS та Android, які перетворюють панорамний контент на віртуальний тур із гарячими точками та аудіогідом. Наша команда реалізує проєкт під ключ — від вибору технології рендерингу до публікації в сторах, забезпечуючи стабільну роботу та подальшу підтримку.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка додатку для перегляду 360°-панорам на iOS та Android
Середній
~3-5 днів
Часті запитання

Ми реалізуємо мобільні додатки для перегляду 360°-панорам, які виходять далеко за межі простого статичного фото. Це або відео в equirectangular-форматі з декодуванням 4K/8K в реальному часі, або інтерактивні віртуальні тури з точками інтересу (hotspots), переходами між локаціями та аудіогідом. Технічні вимоги високі: потрібне декодування відео або керування набором тайлів з плавним переходом. Спеціалізуємося на таких рішеннях для iOS та Android, використовуючи Swift, Kotlin, Metal та OpenGL ES. Досвід — понад 10 років у мобільній розробці, десятки реалізованих проєктів з 360°-контентом.

Як забезпечити плавний рендеринг 360°-відео на iOS?

360°-відео в equirectangular-форматі на iOS декодується через AVPlayer з AVPlayerLayer, але AVPlayerLayer рендерить тільки в 2D. Для сферичної проєкції потрібен AVPlayerItemVideoOutput + Metal або SceneKit. Згідно з документацією Apple, AVPlayerItemVideoOutput.copyPixelBuffer(forItemTime:itemTimeForDisplay:) блокує викликаючий потік на час декодування кадру. На iPhone 12 декодування 4K H.265 займає 8–15ms — це половина бюджету кадра при 60fps. Виклик на CADisplayLink-callback в main thread дає видимі просадки.

Правильно: CADisplayLink тільки запускає Metal render pass, копіювання CVPixelBuffer — в окремій DispatchQueue(qos: .userInteractive), результат передається в Metal через CVMetalTextureCacheCreateTextureFromImage.

let displayLink = CADisplayLink(target: self, selector: #selector(renderFrame))
displayLink.preferredFrameRateRange = CAFrameRateRange(minimum: 60, maximum: 120, preferred: 120)
@objc func renderFrame() {
    videoDecodeQueue.async { [weak self] in
        guard let pixelBuffer = self?.videoOutput.copyPixelBuffer(
            forItemTime: self!.playerItem.currentTime(),
            itemTimeForDisplay: nil
        ) else { return }
        self?.metalRenderer.render(pixelBuffer: pixelBuffer)
    }
}

Такий підхід гарантує плавний рендеринг навіть на старих пристроях. Для Android аналогічне рішення будується на TextureView + MediaCodec з поверхневим викликом OpenGL.

Чому тайлова панорама краща для віртуальних турів?

Для високоякісних статичних панорам (готелі, нерухомість, музеї) використовують не єдине зображення, а тайли за аналогією з картами: кілька рівнів деталізації, розбитих на сітку. При наближенні (зменшенні FOV) підвантажуються тайли більш високої роздільної здатності.

Стандарт — Krpano tile format або Marzipano. Для мобільного рендеру використовуємо власний Metal/OpenGL ES пайплайн або PanoramaGL (Android). Тайли завантажуються через URLSession з пріоритетами: спочатку видимий квадрант сфери, потім сусідні 4 тайли (prefetch).

LRU-кеш для тайлів — обов'язково. Без нього при навігації по віртуальному туру (10+ локацій × 6 граней куба × 4 рівні деталізації) пам'ять зростає до 800 МБ за 15 хвилин. Наш досвід показує, що оптимізація кешу знижує споживання до 120 МБ.

Параметр Відео-панорама Тайлова панорама
Роздільна здатність Обмежена декодером (4K~8K) Практично безлімітна (сітка тайлів)
Продуктивність Залежить від апаратного декодування Лінійно від числа тайлів на екрані
Інтерактивність Обмежена (тільки панорама) Hotspots, переходи, аудіогід
Розмір на диску 500 МБ на 5 хвилин 4K відео ~50 МБ на локацію (10 тайлів)

Hotspots та інтерактивність

Hotspot — це точка в 3D-просторі сфери, яка при рендерингу перетворюється на 2D-елемент на екрані (іконка, підказка, кнопка переходу). Конвертація зі сферичних координат (yaw/pitch) у screen coordinates:

func sphericalToScreen(yaw: Float, pitch: Float, cameraYaw: Float, cameraPitch: Float, fov: Float, screenSize: CGSize) -> CGPoint? {
    // Матричне перетворення: сферичні → декартові → проєкція камери → NDC → screen
    let direction = SIMD3<Float>(
        cos(pitch) * sin(yaw),
        sin(pitch),
        cos(pitch) * cos(yaw)
    )
    // ... view matrix × projection matrix → clip space → viewport
}

Якщо dot(direction, cameraForward) < 0 — hotspot за камерою, не рендеримо.

Анімація hotspot-появи при потраплянні в FOV — fade-in через CABasicAnimation, не через SwiftUI-анімацію (SwiftUI overlay поверх Metal SCNView дає 2–3ms layout pass на кожний кадр). Використовуємо власний рендер-пайплайн, що мінімізує overhead.

Гіроскоп та компас

CMDeviceMotion через CMMotionManager дає quaternion орієнтації пристрою з частотою до 100 Hz. Перетворюємо в Euler-кути для камери сцени, застосовуємо фільтр Калмана для згладжування джиттера. Без фільтра гіроскопний дрейф на старих пристроях (~0.3° на секунду) за 5 хвилин відводить «північ» на 15°.

Північний напрямок при старті — з CLLocationManager.heading, прив'язуємо нульовий yaw до магнітної/істинної півночі. Гарантуємо точність відстеження на всіх iPhone та iPad з гіроскопом.

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

В рамках проєкту ми надаємо:

  • детальну технічну документацію та архітектурну схему рендер-пайплайну;
  • доступ до репозиторію з кодом та інструментом для збірки;
  • інструкції з інтеграції з бекендом та публікації в сторах;
  • 3 місяці технічної підтримки після здачі.

Процес роботи

  1. Аналітика та збір вимог: обговорюємо цілі, типи контенту, цільові пристрої.
  2. Проектування архітектури рендер-пайплайну (Metal/OpenGL ES).
  3. Розробка модуля завантаження та кешування тайлів.
  4. Інтеграція гіроскопа, компаса та сенсорного керування.
  5. Реалізація hotspots з анімаціями та переходами.
  6. Оптимізація продуктивності під цільові пристрої.
  7. Тестування на реальних пристроях та симуляторах.
  8. Підготовка документації та інструкцій.
  9. Супровід при публікації в App Store та Google Play.
  10. Технічна підтримка протягом 3 місяців після здачі.
Додатково про кешування тайлів

Для кешу використовуємо LRU-стратегію з обмеженням у 100 МБ. Кожний тайл важить в середньому 100-300 КБ. При підвантаженні нової локації попередньо завантажуємо всі тайли поточного рівня, а також тайли суміжної локації, якщо вона визначена картою переходів. Це виключає лаги при навігації.

Строки розробки

Компонент Строки
Базова відео-панорама з Metal-рендером (iOS) 2–3 тижні
Тайлова панорама з кешуванням (iOS/Android) 3–5 тижнів
Віртуальний тур з 10+ локаціями, hotspots, аудіогідом 6–10 тижнів
Повний цикл (проектування, розробка, тестування, деплой) 8–14 тижнів

Вартість розраховується індивідуально після аналізу вимог. Оцінимо проєкт протягом 2 робочих днів. Зв'яжіться з нами для оцінки вашого проєкту — ми проаналізуємо вимоги та запропонуємо оптимальне рішення. Отримайте консультацію, щоб обговорити деталі.

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714