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

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

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

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Разработка видеозвонков в мобильном приложении
Сложный
от 1 недели до 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

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

Видеозвонок — это не просто WebRTC-соединение. Это управление камерой и микрофоном, lifecycle на уровне системы, обработка прерываний (входящий звонок, уведомление, блокировка экрана), корректная работа в фоне и на низком заряде батареи. Каждая из этих деталей — отдельная задача с нетривиальными решениями на iOS и Android.

Выбор транспорта: WebRTC vs готовые SDK

Чистый WebRTC — это RTCPeerConnection, RTCSessionDescription, ICE/STUN/TURN серверы, getUserMedia, сигналинг через WebSocket. Полная реализация с нуля занимает 3–6 недель только на транспортный слой, без UI.

Большинство проектов выбирают SDK поверх WebRTC: Twilio Video, Daily.co, 100ms, Livekit или Agora. Они берут на себя ICE negotiation, codec negotiation (VP8/VP9/H.264/AV1), адаптивный битрейт, и дают готовые нативные обёртки для iOS и Android.

Если требования к кастомизации невысоки и важна скорость запуска — выбираем SDK. Если нужен полный контроль над кодеком, шифрованием или минимальным весом бинарника — чистый WebRTC через GoogleWebRTC (iOS) или org.webrtc (Android).

Нативная реализация на iOS: AVCaptureSession и CallKit

Видео с камеры захватывается через AVCaptureSession. Правильная инициализация:

let session = AVCaptureSession()
session.sessionPreset = .hd1280x720

let camera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front)
let input = try AVCaptureDeviceInput(device: camera!)
let output = AVCaptureVideoDataOutput()
output.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))

AVCaptureVideoDataOutput с делегатом даёт сырые CMSampleBuffer — их передаём в WebRTC через RTCVideoSource. Важно: AVCaptureSession.startRunning() вызывается строго в фоновом потоке, не на главном — иначе UI заморозится на 200–400 мс.

Переключение фронтальной/основной камеры — AVCaptureSession.beginConfiguration() + удаление старого input + добавление нового + commitConfiguration(). Без begin/commit вокруг этих операций — флicker на видео во время переключения.

CallKit — обязательный компонент для iOS-приложений с видеозвонками. Без него входящий звонок отображается как push-уведомление, которое может быть пропущено. С CallKit — полноэкранный системный экран звонка, интеграция с Bluetooth/AirPods, правильная обработка прерывания аудио. Реализуем через CXProvider и CXCallController. VoIP push через PKPushRegistry — единственный способ разбудить приложение для входящего звонка.

Нативная реализация на Android: Camera2 и ConnectionService

На Android Camera2 API (CameraManager.openCamera()) даёт доступ к ImageReader с форматом YUV_420_888 — стандартный формат для WebRTC на Android. Для большинства задач хватает уровня CameraDevice.StateCallback + CaptureRequest.Builder.

ConnectionService — Android-аналог CallKit. Регистрируем PhoneAccount, через TelecomManager управляем состоянием звонка. Без этого на Android 10+ приложение не может работать в foreground во время звонка без постоянного уведомления.

Для сохранения соединения при сворачивании — ForegroundService с типом mediaProjection или phoneCall. На Android 14 это требует явного указания в манифесте: android:foregroundServiceType="camera|microphone".

Управление камерой и микрофоном

Mute микрофона — не отключение устройства, а замена аудио-трека на тишину. В WebRTC: RTCAudioTrack.isEnabled = false. Полное отключение микрофона на уровне AVAudioSession — ломает эхоподавление.

Flip камеры во время звонка — через RTCCameraVideoCapturer.stopCapture() + смена устройства + startCapture(with:fps:). Без полной остановки — крэш на некоторых устройствах Huawei и Xiaomi из-за состояния гонки в Camera2.

Поворот экрана — RTCVideoTrack сам по себе не учитывает ориентацию. Нужно передавать RTCVideoRotation в RTCVideoFrame при захвате с камеры, иначе собеседник увидит повёрнутое на 90° видео на устройствах с portrait-lock.

Качество соединения и адаптация

Адаптивный битрейт — базовая функция WebRTC (GCC алгоритм). Но нужно явно задать диапазон: RTCRtpEncodingParameters с minBitrateBps: 100_000 и maxBitrateBps: 1_500_000. Без ограничения сверху на Wi-Fi WebRTC попытается использовать 4–8 Мбит/с — это некомфортно для других пользователей сети.

Индикатор качества соединения через RTCPeerConnection.getStats() — парсим RTCInboundRtpStreamStats для framesPerSecond и packetsLost. Потери > 5% — показываем предупреждение пользователю.

Процесс

Аудит требований → выбор транспорта (WebRTC или SDK) → реализация сигналинга → интеграция камеры/микрофона → CallKit/ConnectionService → UI (превью локального видео, удалённое видео, кнопки управления) → тестирование на реальных устройствах.

Базовый видеозвонок 1-на-1 через SDK (Twilio/Agora/100ms) с управлением камерой, mute и flip — 1–2 недели. Чистый WebRTC с сигналингом, CallKit, фоновый режим — 3–5 недель. Стоимость рассчитывается после анализа требований.