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

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

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

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

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

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

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

VK Live не предоставляет официальный мобильный SDK для сторонних приложений — это первое, что нужно понять. Трансляция организуется через RTMP/RTMPS-протокол на endpoint, который пользователь получает в настройках своей трансляции VK. Задача разработчика — захватить видео с камеры, закодировать его в H.264/H.265 и отправить на rtmp://vp.vkforms.ru/live с корректным stream key.

Ключевые технические сложности

Самая частая проблема — получение RTMP-ключа без участия пользователя. VK API (video.startStreaming) требует авторизацию через VK Connect с scope video. Если токен просрочен или не содержит нужный scope, метод возвращает error_code: 15 (access denied), и трансляция не запускается. Токен храним в Keychain/EncryptedSharedPreferences, обновляем через refresh flow до истечения, не по факту ошибки.

Кодирование на мобиле. На iOS используем VideoToolbox через AVAssetWriter + AVAssetWriterInput с параметрами:

  • AVVideoCodecKey: AVVideoCodecType.h264
  • AVVideoWidthKey: 1280, AVVideoHeightKey: 720
  • AVVideoCompressionPropertiesKeyAVVideoAverageBitRateKey: 2_500_000
  • AVVideoMaxKeyFrameIntervalKey: 60 (keyframe каждые 2 секунды при 30fps)

Без явного AVVideoMaxKeyFrameIntervalKey энкодер расставляет keyframe слишком редко, RTMP-сервер VK начинает буферизировать дольше, зрители замечают рывки при смене сцены.

На Android — MediaCodec с MediaFormat.MIMETYPE_VIDEO_AVC, MediaFormat.KEY_BITRATE_MODE = BITRATE_MODE_CBR. VBR режим на нестабильном соединении даёт всплески, которые дроп-пакеты на VK-ингесте превращают в артефакты на 2–3 секунды.

Как реализуем

Для RTMP-передачи на iOS используем HaishinKit (Swift, активно поддерживается). На Android — rtmp-rtsp-stream-client-java от pedroSG94 или собственный MediaMuxer с RTMP-клиентом поверх java.net.Socket. В продакшен-проектах предпочитаем нативный MediaCodec-путь с кастомным RTMP без тяжёлых зависимостей.

Схема для iOS с HaishinKit:

let rtmpConnection = RTMPConnection()
let rtmpStream = RTMPStream(connection: rtmpConnection)
rtmpStream.videoSettings = VideoCodecSettings(
    videoSize: CGSize(width: 1280, height: 720),
    bitRate: 2_500_000,
    profileLevel: kVTProfileLevel_H264_High_AutoLevel as String
)
rtmpStream.audioSettings = AudioCodecSettings(bitRate: 128_000)

rtmpConnection.connect("rtmp://vp.vkforms.ru/live")
rtmpStream.publish(streamKey)

Мониторинг качества — подписываемся на RTMPConnection.Event.rtmpStatus, отслеживаем NetStream.Publish.BadName (неверный ключ), NetStream.Failed (разрыв соединения). При NetStream.Failed логируем в Firebase Crashlytics с параметрами: битрейт в момент разрыва, тип соединения (Wi-Fi/Cellular), версия ОС.

Переподключение реализуем с exponential backoff: 2s → 4s → 8s → 16s → 30s (максимум). Бесконечный retry без паузы заблокирует аккаунт на VK-стороне за flood.

Авторизация и получение stream key

Через VK SDK (iOS: VKSDK, Android: vk-android-sdk) или прямой OAuth2-flow:

  1. Открываем WebView или SFSafariViewController на https://oauth.vk.com/authorize?client_id=APP_ID&scope=video&response_type=token
  2. Перехватываем redirect на https://oauth.vk.com/blank.html#access_token=...
  3. Вызываем video.startStreaming с полученным токеном
  4. Из ответа берём rtmp_url и key

Ключ сессионный — действует одну трансляцию. Сохранять между сессиями нельзя.

Сроки

Интеграция на одной платформе (iOS или Android): 2–3 недели с учётом OAuth-flow, захвата видео и базовой обработки сетевых ошибок. Добавление адаптивного битрейта и автопереподключения — ещё неделя. Стоимость рассчитывается индивидуально после анализа требований.