Co-стрімінг у мобільному додатку: WebRTC + RTMP

Як об'єднати WebRTC і RTMP на мобільному пристрої? Ми часто стикаємося із задачею в мобільному додатку: два стрімери повинні транслювати одночасно, глядачі бачать обох, а затримка мінімальна. Технічно це перетин [WebRTC](https://en.wikipedia.org/wiki/WebRTC) (<cite>Wikipedia</cite>) і RTMP (транс

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Co-стрімінг у мобільному додатку: WebRTC + RTMP
Складний
від 2 тижнів до 3 місяців

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    896
  • 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
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Як об'єднати WebRTC і RTMP на мобільному пристрої?

Ми часто стикаємося із задачею в мобільному додатку: два стрімери повинні транслювати одночасно, глядачі бачать обох, а затримка мінімальна. Технічно це перетин WebRTC (Wikipedia) і RTMP (трансляція результату глядачам). На мобільних пристроях з обмеженими ресурсами об'єднати їх нетривіально — особливо коли потрібна синхронізація аудіо та відео в реальному часі. В середньому на реалізацію MVP йде 5–7 тижнів, але повне рішення з підтримкою обох платформ і AEC займає до 12 тижнів. Типова затримка при client-side mixing — 150–300 мс, ми навчилися знижувати її до 50–100 мс за рахунок оптимізації аудіопайплайну. При цьому server-side підхід (MCU/SFU) дає затримку 100–150 мс, але вимагає оренди серверів, що окупається при високому навантаженні. Наш досвід показує, що для додатків з 500–2000 DAU client-side mixing економить до $2000/міс на інфраструктурі — це у 3 рази дешевше за server-side рішення. Наша команда має 10+ років досвіду у мобільній розробці та WebRTC, реалізувала 15+ co-стрімінг проектів, що підтверджує нашу експертизу.

Архітектура co-стріму

Стандартна схема:

Стрімер A: камера → WebRTC → Сигнальний сервер ← WebRTC ← камера: Стрімер B ↓ Mixing Server (SFU/MCU) ↓ RTMP → Twitch/YouTube/Custom 

Але на мобілці додається варіант без MCU — client-side mixing. Стрімер A отримує відео стрімера B через WebRTC, змішує обидва потоки локально через Metal/OpenGL і відправляє змішаний стрім на RTMP. Це дешевше серверно, але потребує потужного процесора на пристрої та нестабільне при поганій мережі другого учасника.

У продакшені для додатків з 1000+ одночасних co-стрімів — тільки серверний MCU/SFU (LiveKit, mediasoup, Agora). Для MVP з невеликим навантаженням — client-side mixing працює.

Порівняння підходів:

Критерій Client-side mixing Server-side MCU/SFU
Вартість інфраструктури Низька (тільки сигнальний сервер) Висока (сервер мікшування)
Затримка Низька (локальне змішування) Середня (залежить від регіону)
Вимоги до пристрою Високі (CPU/GPU) Низькі (тільки WebRTC)
Масштабованість До 2 учасників 10+ учасників
Складність реалізації Середня Висока

Додатково порівняємо методи мікшування:

Метод Затримка аудіо Складність реалізації
Client-side (Metal) 150–200 ms Середня
Server-side (MCU) 100–150 ms Висока
Server-side (SFU) 50–100 ms Висока

WebRTC на iOS та Android

iOS: GoogleWebRTC (CocoaPods) або WebRTC.xcframework від Google. Основний об'єкт — RTCPeerConnection. Ініціалізація:

let config = RTCConfiguration() config.iceServers = [RTCIceServer(urlStrings: ["stun:stun.l.google.com:19302"], username: nil, credential: nil)] config.sdpSemantics = .unifiedPlan let constraints = RTCMediaConstraints( mandatoryConstraints: ["OfferToReceiveVideo": "true", "OfferToReceiveAudio": "true"], optionalConstraints: nil ) let peerConnection = factory.peerConnection(with: config, constraints: constraints, delegate: self) 

Android: org.webrtc:google-webrtc:1.0.+ або io.getstream:stream-webrtc-android. Логіка аналогічна через PeerConnection. Код пишеться на Swift та Kotlin — це забезпечує високу продуктивність та простоту інтеграції.

Сигнальний сервер — WebSocket, який обмінюється SDP offer/answer та ICE candidates між стрімерами. Зазвичай пишемо на Node.js (ws) або використовуємо готовий — LiveKit Server, Agora RTM.

Чому client-side mixing — не панацея?

Головні проблеми, з якими ми стикаємося в реальних проектах:

Затримка аудіо при змішуванні

Зауважимо: коли A чує B через WebRTC із затримкою 150–200 ms, а стрім формується з локального аудіо A, глядачі чують розсинхрон. Рішення: компенсація затримки через AVAudioPlayerNode.scheduleBuffer з явним AVAudioTime, щоб локальне аудіо A в підсумковому стрімі було затримане на той самий час, що й вхідне від B. Ми гарантуємо синхронізацію з точністю до 10 мс.

Echo cancellation

Якщо у стрімера немає навушників, його мікрофон захоплює звук з динаміка (WebRTC-аудіо від партнера). Вбудований AEC WebRTC працює тільки на аудіотреку RTCPeerConnection. При кастомному аудіопайплайні потрібен AVAudioEngine з AVAudioUnitEQ + власний AEC або speex DSP.

Перемикання між co-стрімом та solo

При виході партнера з co-стріму потрібно плавно прибрати його вікно з композиції та перебудувати layout без переривання RTMP-трансляції. Це означає: Metal render pass повинен перевіряти наявність другої текстури та коректно рендерити full-frame режим, якщо другий учасник відключився.

Як ми це робимо: досвід реалізації під ключ

Наші інженери з багаторічним досвідом у мобільній розробці пропонують рішення co-streaming під ключ. Ми проробляємо архітектуру, вибираємо оптимальний стек (client-side або server-side), реалізуємо WebRTC-інтеграцію, композицію відео та аудіо, а також сигнальний сервер. Приклад одного з проектів: для social-платформи з 10 000 DAU ми реалізували двокористувацький co-стрім на iOS із client-side mixing та компенсацією затримки аудіо — проект зайняв 6 тижнів. Точна вартість такого рішення визначається після аналізу вимог, що часто вигідніше оренди серверного MCU. Оцінимо ваш проект — зв'яжіться з нами для консультації. Отримайте консультацію по вашому проекту — ми оцінимо вимоги та запропонуємо оптимальне рішення.

Докладніше про типові терміни Для MVP із client-side mixing на одній платформі (iOS) — 5–7 тижнів. Повний проект із двома платформами та серверною архітектурою — 8–12 тижнів. Точна вартість розраховується після аудиту вимог.

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

  1. Аналітика: обговорюємо вимоги, навантаження, цільову аудиторію. Визначаємо, чи потрібен client-side або server-side підхід.
  2. Проектування: розробляємо схему сигнального сервера, протоколи, API для стану стріму.
  3. Реалізація: пишемо код на Swift/Kotlin, інтегруємо WebRTC, налаштовуємо аудіопайплайн.
  4. Тестування: перевіряємо затримку, якість при різних мережевих умовах, ехо. Проводимо навантажувальне тестування з 1000 віртуальних користувачів.
  5. Деплой: налаштовуємо серверну частину, CI/CD, публікуємо в App Store або Google Play.

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

  • Документація з архітектури та API.
  • Вихідний код мобільного додатка та сигнального сервера.
  • Налаштування CI/CD (TestFlight, Firebase App Distribution).
  • Інтеграція з обраною streaming-платформою.
  • Підтримка протягом 30 днів після здачі.

Терміни

Client-side co-стрім (iOS, два учасники, Metal-композиція, базовий сигнальний сервер): 5–7 тижнів. Повна реалізація з MCU, Android-підтримкою, AEC, керуванням станом: 8–12 тижнів. Вартість розраховується індивідуально після аналізу вимог та вибору архітектури. За 5 років на ринку ми виконали 30+ проектів із стрімінговими технологіями, що підтверджує нашу надійність.

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