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

Мы реализуем отправку видео в мобильном чате под ключ — от выбора файла до встроенного плеера. Опыт показывает, что «сырое» видео с камеры загружать нельзя: без транскодирования и чанкованной отправки пользователь ждёт минуты, а на слабом соединении получает таймаут. Наша команда имеет 10-летний опы

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, 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 секунд.

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

Как обеспечить возобновляемую загрузку?

Видео нельзя загружать одним запросом без поддержки возобновления. Соединение прервётся — и весь прогресс потерян.

Правильный подход — multipart upload на стороне сервера (AWS S3 Multipart Upload, Cloudflare R2, или кастомный чанкованный upload). Файл делится на части по 5–10 МБ, каждая загружается отдельным запросом. При обрыве — возобновляем с последнего успешного чанка.

На iOS реализуем через URLSession с Background Configuration (URLSessionConfiguration.background(withIdentifier:)): загрузка продолжается даже после сворачивания приложения. На Android — WorkManager с UploadWorker, который получает setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) для работы в фоне.

В 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 раза по скорости старта потока.

Ограничения и 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 дня. Стоимость рассчитывается индивидуально после анализа требований.

Свяжитесь с нами для бесплатной оценки проекта. Наши сертифицированные инженеры проводят ревью интеграции и дают рекомендации по оптимизации.