Интеграция трансляции в Twitch из мобильного приложения

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция трансляции в Twitch из мобильного приложения
Средний
~5 дней
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • 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

Интеграция трансляции в Twitch из мобильного приложения

Twitch Live Streaming SDK для iOS и Android — не тот инструмент, который «просто подключил и работает». Типичный сценарий: разработчик добавляет TwitchIVS или пробует IVSBroadcastSession, первый тест на симуляторе проходит, но на реальном iPhone 13 с нестабильным LTE стрим зависает через 90 секунд, потому что битрейт не адаптируется под пропускную способность сети.

Где всё ломается на практике

Amazon IVS (Interactive Video Service) — текущий официальный путь для Twitch-интеграции в мобиле. SDK доступен через CocoaPods (AmazonIVSBroadcast) и Maven (com.amazonaws:ivs-broadcast). Основная боль — правильная настройка IVSBroadcastConfiguration.

По умолчанию IVSVideoConfiguration выставляет фиксированный битрейт. При падении сигнала энкодер продолжает пушить 3.5 Мбит/с в буфер, буфер растёт, задержка стрима уходит за 30 секунд, зрители видят фриз. Решение — включить адаптивный битрейт через IVSAutoQualityMode и выставить minBitrate/maxBitrate диапазоном: обычно 300 kbps–4000 kbps для стримов 720p30.

Вторая проблема — ротация экрана. IVSBroadcastSession не следит за изменением ориентации автоматически. Если не перехватить UIDeviceOrientationDidChangeNotification и не вызвать broadcastSession.setOrientation(_:), стрим в landscape будет транслироваться портретным кадром с чёрными полосами. На Android с CameraX то же самое — нужно подписаться на OrientationEventListener и передавать угол в imageCapture.targetRotation.

Аудиопайплайн отдельная тема. На iOS IVSMicrophoneInput конфликтует с AVAudioSession, если приложение использует фоновое воспроизведение. AVAudioSession.setCategory(.playAndRecord, options: .mixWithOthers) снимает конфликт, но его нужно активировать до инициализации broadcast-сессии, иначе получите OSStatus -10851 в логах.

Как строим интеграцию

Стек для iOS: Swift 5.9+, AmazonIVSBroadcast 1.14+, AVFoundation, ReplayKit (для screen capture). На Android: Kotlin, ivs-broadcast 1.14+, CameraX 1.3, MediaCodec.

Этапы:

1. Настройка IVS-канала. Создаём канал через AWS Console или Terraform-модуль, получаем ingest endpoint и stream key. Endpoint вида rtmps://a1b2c3d4e5f6.global-contribute.live-video.net:443/app/. Ключ хранится в Keychain (iOS) или EncryptedSharedPreferences (Android) — не в конфиге приложения.

2. Конфигурация сессии. На iOS:

let config = IVSBroadcastConfiguration()
try config.video.setSize(CGSize(width: 1280, height: 720))
try config.video.setTargetFramerate(30)
try config.video.setInitialBitrate(2_500_000)
try config.video.setMinBitrate(300_000)
try config.video.setMaxBitrate(4_000_000)
config.video.usesBFrames = true

usesBFrames = true снижает битрейт при той же визуальной качестве — включайте, если минимальный target iOS 14+.

3. Камера и микрофон. Вместо прямого использования AVCaptureSession — подключаем через IVSBroadcastSession.listAvailableDevices(). SDK сам управляет AVCaptureSession, не нужно создавать конкурирующую сессию. Если надо показывать превью — используем IVSImagePreviewView, который SDK отдаёт через attachCamera(_:toSlotWithName:previewAspectMode:).

4. Обработка сетевых событий. Реализуем IVSBroadcastSessionDelegate:

func broadcastSession(_ session: IVSBroadcastSession,
                      networkHealthChanged health: IVSBroadcastSessionHealth) {
    switch health {
    case .bad, .critical:
        // Показываем предупреждение пользователю, логируем в Crashlytics
    }
}

5. Завершение и очистка. broadcastSession.stop() асинхронный — не освобождайте сессию сразу. Ждём делегатный вызов broadcastSession(_:transmissionStatisticsChanged:) с нулевым битрейтом, только потом broadcastSession = nil.

Тестирование перед продакшеном

Проверяем поведение при: внезапном разрыве соединения (режим airplane mode на 10 секунд во время стрима), переключении между Wi-Fi и LTE, входящем звонке (прерывание AVAudioSession). Для автоматических тестов — IVSBroadcastSession поддерживает testMode, который имитирует отправку без реального RTMPS-подключения.

Нагрузочный сценарий: запускаем стрим, через 5 минут включаем network link conditioner с профилем 100% Loss на 15 секунд, смотрим, восстанавливается ли сессия без краша и без утечки памяти в Xcode Instruments (allocations + leaks).

Сроки и оценка

Базовая интеграция (одна камера, фиксированное качество, iOS или Android): 1–2 недели. Полноценная реализация с адаптивным битрейтом, ротацией, обработкой прерываний, превью и тестами — 3–5 недель. Если нужна кросс-платформа (Flutter с platform channels или React Native с нативными модулями) — добавляйте 1–2 недели на интеграционный слой.

Стоимость рассчитывается индивидуально после анализа требований.