Интеграция YouTube Live из мобильного приложения
Мы столкнулись с задачей: дать пользователям мобильного приложения возможность стримить прямо на YouTube Live, минуя YouTube Studio. Для этого нужно было получить RTMP endpoint через OAuth, запустить стрим с камеры и управлять им — всё в рамках одного приложения. YouTube Live — самая популярная платформа, но её интеграция требует понимания API и сетевых особенностей. Например, неправильная настройка GOP приводит к отклонению потока, а квота API быстро исчерпывается при частых запросах. Опишем технический процесс: получение RTMP endpoint через YouTube Data API v3, запуск стрима на этот endpoint и управление трансляцией.
Авторизация OAuth 2.0 и получение RTMP endpoint
Трансляция в YouTube состоит из двух объектов: LiveBroadcast (событие с временем, названием, настройками) и LiveStream (технический поток с RTMP URL и ключом). Они связываются через bind. Вот последовательность вызовов:
-
Авторизация: OAuth 2.0 с scope
https://www.googleapis.com/auth/youtube. На iOS используем AppAuth или ASWebAuthenticationSession; на Android — Google Sign-In или AppAuth-Android. - Создание LiveBroadcast:
POST https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet,status,contentDetails { "snippet": { "title": "Моя трансляция", "scheduledStartTime": "YYYY-MM-DDTHH:MM:SSZ" }, "status": { "privacyStatus": "public" }, "contentDetails": { "enableAutoStart": true, "enableAutoStop": true } } - Создание LiveStream:
POST https://www.googleapis.com/youtube/v3/liveStreams?part=snippet,cdn { "snippet": { "title": "Mobile Stream" }, "cdn": { "frameRate": "30fps", "ingestionType": "rtmp", "resolution": "1080p" } } Ответ возвращает ingestionInfo.ingestionAddress (RTMP URL) и ingestionInfo.streamName (stream key). 4. Bind:
POST .../liveBroadcasts/bind?id={broadcastId}&part=id,snippet&streamId={streamId} Итоговый RTMP URL: rtmp://{ingestionAddress}/{streamName}.
Какие требования к видео для YouTube Live?
Для отправки видео на YouTube используем HaishinKit (iOS) или rtmp-rtsp-stream-client-java (Android). YouTube принимает H.264 + AAC. Требования к потоку:
| Параметр | Значение |
|---|---|
| Видеокодек | H.264 (baseline/main/high) |
| Максимальное разрешение | 1080p60 |
| Аудиокодек | AAC-LC, 44.1/48 кГц, ≤256 кbps |
| Максимальный битрейт | ~6 Mbps (1080p30) |
| GOP (keyframe interval) | ≤2 секунды |
Важно: GOP должен быть не более 2 секунд, иначе YouTube отклоняет поток. На iOS это kVTCompressionPropertyKey_MaxKeyFrameInterval: 60 (для 30 fps); на Android — format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2). Также помните: YouTube не принимает RTMPS — только RTMP. На iOS настройте ATS, добавив исключение для домена a.rtmps.youtube.com (только если используете RTMPS).
Как отслеживать статус трансляции?
Проверка состояния потока:
GET .../liveStreams?part=status&id={streamId} status.streamStatus проходит стадии: inactive → testing → active. После active трансляция видна зрителям (если enableAutoStart: true).
Завершение трансляции:
POST .../liveBroadcasts/transition?broadcastStatus=complete&id={broadcastId}&part=id,status Polling статуса: каждые 5 секунд до active, затем раз в 30 секунд для concurrentViewers. Учитывайте квоту: 10 000 единиц/день; liveStreams.list стоит 1 единицу.
Подробнее о квоте API
Каждый запрос к YouTube Data API v3 потребляет единицы квоты. Например, `liveBroadcasts.list` стоит 2 единицы. Для мобильных стримов мы рекомендуем использовать прокси-сервер для кэширования ответов и уменьшения нагрузки. Подробнее в официальной документации (YouTube Data API Quota).Настройка GOP и битрейта
Неправильный GOP приводит к отклонению потока. Мы настраиваем ключевые кадры каждые 2 секунды и битрейт не выше 6 Mbps для 1080p. Это гарантирует стабильную трансляцию без дропов. В наших проектах мы также оптимизируем выбор кодеков под устройство.
Сравнение RTMP и HLS
RTMP обеспечивает задержку в 2-3 раза меньше по сравнению с HLS, что критично для прямых эфиров. HLS удобен для воспроизведения на проигрывателях, но для трансляций RTMP остаётся стандартом. В таблице ниже — сравнение протоколов:
| Протокол | Задержка | Поддержка на мобильных | Рекомендуемое использование |
|---|---|---|---|
| RTMP | 2-5 сек | Отличная (нативная) | Прямые эфиры |
| HLS | 10-30 сек | Хорошая (через плееры) | Видео по запросу |
Что входит в интеграцию?
- Анализ требований и текущей архитектуры приложения.
- Проектирование интеграции: выбор стека (HaishinKit / rtmp-rtsp-stream-client), настройка OAuth.
- Реализация: написание кода для создания трансляций, стриминга, управления.
- Тестирование на реальных устройствах с контролем квоты и статуса.
- Документация: описание API-вызовов и инструкции для поддержки.
- Поддержка после запуска: мониторинг и обновления.
Сроки реализации: от 3 до 5 рабочих дней в зависимости от сложности. Стоимость интеграции варьируется от 150 000 до 300 000 рублей, но может быть скорректирована после анализа. Экономия на времени разработки по сравнению с самостоятельной реализацией может достигать 40%.
Свяжитесь с нами для оценки вашего проекта — мы имеем более 5 лет опыта в мобильной разработке и более 10 проектов со стримингом. Закажите интеграцию сейчас и получите консультацию по оптимизации потоков.
Примечание: Для успешного прохождения App Store Review и Google Play Console необходимо соблюдать политики: трансляции не должны нарушать авторские права, и требуется явное согласие пользователя на использование камеры.







