Реалізація відправки відео в чаті мобільного додатку

Ми реалізуємо відправку відео в чаті мобільного додатку під ключ — від вибору файлу до вбудованого плеєра. Досвід показує, що необроблене відео високої роздільної здатності з камери завантажувати не можна: без транскодування та чанкованої відправки користувач чекає хвилини, а на слабкому з'єднанні о

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Реалізація відправки відео в чаті мобільного додатку
Середній
~2-3 дні

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

Часті запитання

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Ми реалізуємо відправку відео в чаті мобільного додатку під ключ — від вибору файлу до вбудованого плеєра. Досвід показує, що необроблене відео високої роздільної здатності з камери завантажувати не можна: без транскодування та чанкованої відправки користувач чекає хвилини, а на слабкому з'єднанні отримує таймаут. Наша команда має 10+ років досвіду в iOS та Android-розробці, реалізувала 50+ інтеграцій відеозв'язку для чатів, за 5+ років на ринку ми гарантуємо стабільність і продуктивність. Процес відправки відео в чаті вимагає ретельного технічного рішення.

Чому відправка відео в чаті потребує транскодування?

Відео з iPhone 14 Pro в 4K/60fps важить ~400 МБ на хвилину. Навіть кліп на 15 секунд — 100 МБ. Завантажувати напряму неприйнятно ні за часом, ні за трафіком.

На iOS відео з PHPickerViewController або UIImagePickerController приходить у форматі MOV (HEVC або H.264). Перед завантаженням його потрібно транскодувати. Стандартний шлях — AVAssetExportSession з presetом AVAssetExportPresetMediumQuality (720p, ~2 Мбіт/с) або AVAssetExportPreset1280x720. Експорт асинхронний, займає від 2 до 30 секунд залежно від довжини кліпу та моделі пристрою. На iPhone SE 2nd gen транскодування 30-секундного відео в 720p — близько 8 секунд — Apple Developer Documentation.

На Android ситуація складніша: MediaMuxer + MediaCodec дають максимальний контроль, але потребують багато коду. У більшості проєктів використовуємо FFmpegKit (форк мобільного FFmpeg) — дозволяє задати бітрейт, роздільну здатність і кодек однією командою: -vcodec libx264 -crf 28 -vf scale=720:-2. Мінус — додає ~15 МБ до APK. Порівняно з AVAssetExportSession, FFmpegKit повільніший приблизно в 1.5 рази для коротких кліпів.

Як забезпечити відновлюване завантаження?

Відео не можна завантажувати одним запитом без підтримки відновлення. З'єднання перерветься — і весь прогрес втрачено.

Правильний підхід — multipart upload на стороні сервера (AWS S3 Multipart Upload, Cloudflare R2, або кастомне чанковане завантаження). Дійте так:

  1. Використовуйте multipart upload на сервері.
  2. Діліть файл на частини по 5–10 МБ.
  3. На iOS реалізуйте через URLSession з Background Configuration (URLSessionConfiguration.background(withIdentifier:)): завантаження продовжується навіть після згортання додатка.
  4. На Android — WorkManager з UploadWorker, який отримує setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) для роботи в фоні.
  5. При обриві — відновлюємо з останнього успішного чанка.

У React Native — react-native-background-upload або кастомний нативний модуль. Стандартний fetch з FormData не підтримує background upload на iOS.

Як скоротити час очікування користувача?

Прев'ю-кадр генеруємо до завантаження: на iOS — AVAssetImageGenerator з generateCGImagesAsynchronously, на Android — MediaMetadataRetriever.getFrameAtTime(). Кадр стискаємо до JPEG 480p і завантажуємо окремо — він з'явиться в чаті миттєво, поки відео ще завантажується.

Для відтворення в чаті не вбудовуємо повний плеєр у комірку — це вб'є продуктивність при скролі. Показуємо thumbnail з кнопкою play, по тапу відкриваємо AVPlayerViewController (iOS) або ExoPlayer (Android) поверх чату. ExoPlayer з SimpleExoPlayer і DefaultMediaSourceFactory підтримує HLS, DASH та progressive MP4 з коробки. Нативний підхід на Android з VideoView дає менше контролю над буферизацією та не підтримує HLS напряму — ExoPlayer вирішує ці проблеми краще в середньому в 2 рази за швидкістю старту потоку.

Детальніше про вибір кодека Для проєктів з високими вимогами до якості можна використовувати HEVC замість H.264, що зменшує розмір на 30-40% при тій самій якості. Однак підтримка HEVC на деяких Android-пристроях обмежена.

Обмеження та UX

Ліміт довжини відео — не технічне, а UX-рішення. Рекомендуємо 60–120 секунд для чатів. Перевищення — показуємо попередження до початку транскодування, не після.

Прогрес-бар завантаження з відображенням швидкості (2.3 МБ/с) та часу, що залишився — обов'язковий елемент. Кнопка скасування повинна зупиняти і транскодування, і upload, і видаляти тимчасові файли.

Етап Час (кліп 30с, 720p)
Транскодування (iPhone 14) 3–5 с
Транскодування (iPhone SE 2) 7–12 с
Upload 15 МБ на 10 Мбіт/с ~12 с
Генерація прев'ю < 1 с
Проблема Рішення
Великий розмір файлу Транскодування в 720p H.264
Обрив з'єднання Chunked upload з відновленням
Затримка відображення Миттєве прев'ю

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

Ми надаємо: документацію по API, вихідний код модуля, налаштовані схеми авторизації для S3/GCS, інструкцію з розгортання на сервері та навчання вашого iOS/Android-розробника. Гарантуємо підтримку на етапі введення в експлуатацію. Замовте реалізацію відеозавантаження у вашому чаті — наші інженери проведуть аудит і запропонують оптимальне рішення.

Строки

Базова реалізація (вибір, транскодування, chunked upload, прев'ю, відтворення) — 3–5 днів за готового бекенду з підтримкою multipart upload. Background upload + відновлення — ще 1–2 дні. Вартість розраховується індивідуально після аналізу вимог, орієнтовний діапазон — від $500 до $1500 за базову реалізацію.

Зв'яжіться з нами для безкоштовної оцінки проєкту. Наші сертифіковані інженери проводять рев'ю інтеграції та дають рекомендації з оптимізації.