Разработка публикации видео-постов в мобильном приложении

Мы специализируемся на разработке публикации видео в мобильных приложениях. Типичная проблема: пользователь снимает 4K/60fps видео — 400 МБ за 60 секунд. Если гнать такой файл на сервер без обработки, загрузка затянется на минуты, а плеер в ленте будет лагать. Экономия на трафике при транскодировани

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

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

Мы специализируемся на разработке публикации видео в мобильных приложениях. Типичная проблема: пользователь снимает 4K/60fps видео — 400 МБ за 60 секунд. Если гнать такой файл на сервер без обработки, загрузка затянется на минуты, а плеер в ленте будет лагать. Экономия на трафике при транскодировании может достигать $500 ежемесячно при 1000 постов. Решение — транскодирование, обрезка и upload с возобновлением. Ниже — как это сделать на iOS и Android с учётом лучших практик. Наш опыт: более 5 лет в мобильной разработке, более 20 проектов с видеоконтентом. Если вам нужна такая функция, свяжитесь с нами для консультации.

Выбор и обрезка видео

PHPickerViewController с filter: .videos на iOS. Для социальных постов обычно ограничиваем длину — 60–90 секунд. Проверяем длительность через PHAsset.duration ещё в пикере, до загрузки данных.

Обрезка — AVPlayerViewController со встроенным trim editor (iOS 14+, AVPlayerViewController.allowedPictureInPictureMediaTypes), или кастомный триммер через AVPlayer + AVPlayerLayer с drag-handles для CMTimeRange. Кастомный триммер даёт полный контроль над UI, но требует ~2–3 дней разработки отдельно.

На Android — VideoTrimmingView через MediaPlayer + MediaMetadataRetriever для генерации тайм-лайна. Или используем isoviewer / mp4parser для обрезки без полного декодирования.

Технические детали выбора медиаНа iOS используем `PHPhotoLibrary.requestAuthorization(for: .readWrite)` для доступа к галерее. На Android — `ActivityResultContracts.GetContent()` с MIME-типом `video/*`. На обоих платформах проверяем размер и длительность до загрузки.

Обязательное транскодирование

Видео с камеры современного смартфона в 4K/60fps — 400 МБ в минуту. Для поста в 60 секунд это 400 МБ. Транскодируем до загрузки.

Целевые параметры для постов: 1080p, H.264, 4–6 Мбит/с, AAC 128 кбит/с. Это даёт ~35–45 МБ для 60-секундного клипа — разумный компромисс между качеством и размером. Транскодирование на устройстве занимает 20–30 секунд, что в 2–3 раза быстрее, чем загрузка исходного видео на сервер и обратная обработка.

На iOS — AVAssetExportSession с AVAssetExportPreset1920x1080:

let export = AVAssetExportSession(asset: asset, presetName: AVAssetExportPreset1920x1080)! export.outputURL = tempOutputURL export.outputFileType = .mp4 export.exportAsynchronously { // completion } 

Прогресс транскодирования через export.progress опрашиваем по таймеру — у AVAssetExportSession нет делегата для прогресса, только polling. На iPhone SE 2nd gen транскодирование 60-секундного видео — 20–30 секунд. Нужен явный прогресс-индикатор, иначе пользователь решит, что приложение зависло.

Процесс транскодирования:

  1. Получить исходный AVAsset.
  2. Задать выходные параметры (пресет, кодек, контейнер).
  3. Запустить асинхронный экспорт.
  4. Отслеживать прогресс через polling.
  5. По завершении обработать ошибки или использовать готовый файл.

На Android — FFmpegKit для гибкого транскодирования или MediaTranscoder (Natario1) — более современная библиотека на MediaCodec без FFmpeg. MediaTranscoder весит ~500 КБ против ~15 МБ у FFmpegKit — разница в 30 раз, важная для размера APK.

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

Видео для поста — крупный файл, upload должен поддерживать возобновление. Используем S3 Multipart Upload: файл делим на части по 5–10 МБ, каждую загружаем параллельно (2–3 параллельных запроса ускоряют upload без перегрузки сети).

  1. Разделение файла на части фиксированного размера.
  2. Параллельная загрузка частей с контролем ошибок.
  3. Сборка файла на сервере.

На iOS — URLSession с BackgroundConfiguration для продолжения upload при сворачивании. Completion handler через application(_:handleEventsForBackgroundURLSession:) в AppDelegate.

На Android — WorkManager с UploadWorker и setConstraints(Constraints.Builder().setRequiredNetworkType(CONNECTED).build()). WorkManager гарантирует выполнение даже после перезапуска устройства — если пользователь вышел из приложения в середине загрузки, при следующем запуске upload продолжится.

Как оптимизировать превью и плеер для ленты?

Превью-кадр генерируем до начала upload — из оригинального видео через AVAssetImageGenerator (iOS) или MediaMetadataRetriever (Android), кадр на 1-й секунде. Загружаем превью отдельно, быстро — пользователь видит пост в ленте с превью, пока видео ещё обрабатывается.

Плеер в ленте — автозапуск при появлении в viewport. Не использовать AVPlayer для каждой ячейки ленты — один shared AVPlayer, который переназначается при скролле (AVQueuePlayer для предзагрузки следующего). На Android — ExoPlayer с ExoPlayer.Builder().setLoadControl(DefaultLoadControl()) и PlayerView в RecyclerView. Предзагружаем следующее видео при скролле через MediaSource в ConcatenatingMediaSource.

Mute по умолчанию — стандарт для автозапуска в ленте. Звук включается тапом.

Сравнение подходов на iOS и Android

Компонент iOS Android
Выбор видео PHPickerViewController ActivityResultContracts.GetContent()
Транскодирование AVAssetExportSession MediaTranscoder (500 КБ) vs FFmpegKit (15 МБ)
Upload с возобновлением URLSession BackgroundConfiguration WorkManager
Плеер в ленте AVQueuePlayer ExoPlayer
Генерация превью AVAssetImageGenerator MediaMetadataRetriever

Сроки и что входит в работу

Этап Срок Примечание
Выбор + обрезка + транскодирование + upload + превью + плеер 3–5 дней При готовом бэкенде и API
Дополнительно: кастомный триммер, background upload, оптимистичный UI +2–3 дня

Отметим: что входит: анализ требований, проектирование архитектуры, реализация с код-ревью, документация по сборке и деплою, инструкция для пользователей, поддержка в течение месяца после релиза. Стоимость разработки такого функционала обычно составляет от $6,000 до $12,000 в зависимости от платформ и сложности. Закажите разработку и убедитесь в качестве нашего подхода.

Если вам нужно реализовать видео-посты в приложении, напишите нам — мы поможем. Получите консультацию по интеграции видео-постов в ваше приложение.