Інтеграція VK Live у мобільний додаток: RTMP, кодування та авторизація

Інтеграція VK Live у мобільний додаток — завдання, яке здається простим, доки не зіткнешся з відсутністю офіційного SDK. Все впирається в RTMP-протокол, сесійний ключ і кодування в реальному часі. Ми вирішували її для iOS та Android, і ось що з'ясували. ## Які технічні складнощі виникають при інт

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція VK Live у мобільний додаток: RTMP, кодування та авторизація
Середній
~5 днів

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

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

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

  • 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

Інтеграція VK Live у мобільний додаток — завдання, яке здається простим, доки не зіткнешся з відсутністю офіційного SDK. Все впирається в RTMP-протокол, сесійний ключ і кодування в реальному часі. Ми вирішували її для iOS та Android, і ось що з'ясували.

Які технічні складнощі виникають при інтеграції VK Live?

Як отримати RTMP-ключ без участі користувача? — інтеграція трансляції

Найчастіша проблема — отримання RTMP-ключа через VK API без ручного введення. Метод video.startStreaming вимагає авторизацію через VK Connect з scope video. Якщо токен прострочений або не містить потрібний scope, повертається error_code: 15 (access denied), і трансляція не запускається. Ми зберігаємо токен у Keychain (iOS) або EncryptedSharedPreferences (Android), оновлюємо через refresh flow до завершення, а не за фактом помилки. Це підвищує успішність першої трансляції до 95% і економить до 30 секунд на кожному вході. Отримайте консультацію з налаштування OAuth2-потоку — це заощадить дні розробки.

Чому кодування H.264 вимагає точного налаштування?

Кодування на мобільному пристрої — вузьке місце. На 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 і BITRATE_MODE_CBR. VBR на нестабільному з'єднанні дає сплески бітрейту, які дроп-пакети на VK-інгесті перетворюють на артефакти на 2–3 секунди. Тому ми фіксуємо CBR і обмежуємо GOP до 60 кадрів.

Як ми реалізуємо RTMP-трансляцію

Порівняння підходів: HaishinKit vs кастомний RTMP

Параметр HaishinKit (iOS) Кастомний RTMP (Android)
Час розробки 1–2 дні 3–5 днів
Гнучкість Середня Висока — повний контроль над буферами
Залежності Зовнішня бібліотека Тільки стандартні API
Підтримка Активна, оновлення Своїми силами
Продуктивність Хороша, 60 fps Відмінна при кастомному пулі потоків

HaishinKit скорочує час впровадження у 2–3 рази порівняно з кастомним рішенням, але дає менше гнучкості для тонкого налаштування буферизації.

На iOS для RTMP-передачі використовуємо HaishinKit (Swift, активно підтримується). На Android — віддаємо перевагу нативному MediaCodec з кастомним RTMP-клієнтом поверх java.net.Socket, уникаючи важких залежностей. Схема для 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.

Порівняння налаштувань кодування для iOS та Android

Параметр iOS (VideoToolbox) Android (MediaCodec)
Кодек H.264/H.265 H.264/H.265
Бітрейт 2.5–4 Mbps 2.5–4 Mbps
GOP 60 кадрів 60 кадрів
Режим бітрейту CBR CBR
Профіль High High

Авторизація та отримання 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

Ключ сесійний — діє одну трансляцію. Зберігати між сесіями не можна.

Чек-лист перевірки інтеграції
  • [ ] Токен авторизації отримано з scope video
  • [ ] RTMP-ключ дійсний для поточної трансляції
  • [ ] Параметри кодування встановлено (CBR, GOP 60)
  • [ ] Обробка помилок з exponential backoff
  • [ ] Логування у Crashlytics
  • [ ] Перевірка відповідності App Store Review Guidelines та Google Play Developer Policy

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

  • Повна інтеграція RTMP-трансляції на iOS або Android (за вибором)
  • OAuth2-авторизація через VK з обробкою токенів
  • Налаштування кодування H.264/H.265: бітрейт, GOP, профіль
  • Обробка мережевих помилок та авто-перепідключення
  • Моніторинг через Firebase Crashlytics з кастомними логами
  • Документація з використання та підтримки
  • Допомога при публікації в App Store / Google Play (перевірка відповідності правилам)

Терміни та вартість

Інтеграція на одній платформі (iOS або Android): 2–3 тижні з урахуванням OAuth-flow, захоплення відео та базової обробки помилок. Додавання адаптивного бітрейту та автоперепідключення — ще тиждень. Вартість розраховується індивідуально після аналізу вимог. Зв'яжіться, щоб ми оцінили ваш проєкт та підібрали оптимальний стек. Отримайте консультацію — допоможемо розібратися з деталями.

Даємо гарантію на стабільність трансляції при дотриманні рекомендованих налаштувань. Досвід більше 15 проєктів — впевнені в якості.