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

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

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

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

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

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

Інтеграція 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
  • AVVideoCompressionPropertiesKey → AVVideoAverageBitRateKey: 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 проєктів — впевнені в якості.

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714