← Cloudflare Stream / stream
WebRTC
Прямые трансляции (по WHIP) и воспроизведение (по WHEP) с задержкой менее секунды для неограниченного числа одновременных зрителей.
WebRTC отлично подходит, если видео нужно воспроизводить практически в реальном времени, например:
- Если результат прямого эфира зависит от времени (прямые спортивные трансляции, финансовые новости)
- Если зрители взаимодействуют с трансляцией (живые вопросы и ответы, аукционы и т. д.)
- Если вы хотите, чтобы конечные пользователи могли легко начинать прямые трансляции или создавать собственный видеоконтент из веб-браузера или нативного приложения
Шаг 1: Создайте live input
Создайте входной поток одним из двух способов:
-
Используйте Источники прямой трансляции странице дашборда Cloudflare.
Перейдите в Источники прямой трансляции ↗ -
Выполните POST-запрос к
/live_inputsконечная точка API
{
"uid": "1a553f11a88915d093d45eda660d2f8c",
...
"webRTC": {
"url": "https://customer-<CODE>.cloudflarestream.com/<SECRET>/webRTC/publish"
},
"webRTCPlayback": {
"url": "https://customer-<CODE>.cloudflarestream.com/<INPUT_UID>/webRTC/play"
},
...
}Шаг 2: Начните трансляцию с помощью WHIP
У каждого входного потока есть уникальный URL, на который может вести трансляцию один автор. Этот URL должен только быть передан создателю: любой, у кого есть этот URL, может транслировать через этот live input.
Скопируйте URL одним из способов:
-
Источники прямой трансляции странице дашборда Cloudflare.
Перейдите в Источники прямой трансляции ↗ -
webRTCключ в ответе API (см. выше).
Вставьте этот URL в пример кода.
// Add a <video> element to the HTML page this code runs in:
// <video id="input-video" autoplay muted></video>
import WHIPClient from "./WHIPClient.js";
const url = "<WEBRTC_URL_FROM_YOUR_LIVE_INPUT>"; // add the webRTC URL from your live input here
const videoElement = document.getElementById("input-video");
const client = new WHIPClient(url, videoElement);Как только автор трансляции разрешит доступ к камере и микрофону, видео и аудио начнут автоматически передаваться в Cloudflare по протоколу WebRTC.
Вы также можете использовать этот URL-адрес с любым клиентом, поддерживающим Протокол приема WebRTC через HTTP (WHIP) ↗. См. поддерживаемые клиенты WHIP список протестированных нами клиентов с подтверждённой совместимостью с Cloudflare Stream.
Шаг 3: Воспроизведите прямую трансляцию с помощью WHEP
Скопируйте URL одним из способов:
-
Источники прямой трансляции странице дашборда Cloudflare.
Перейдите в Источники прямой трансляции ↗ -
webRTCPlaybackключ в ответе API (см. выше)
Ограничений на количество одновременных зрителей нет.
Вставьте этот URL в пример кода.
// Add a <video> element to the HTML page this code runs in:
// <video id="output-video" autoplay muted></video>
import WHEPClient from "./WHEPClient.js";
const url = "<WEBRTC_URL_FROM_YOUR_LIVE_INPUT>"; // add the webRTCPlayback URL from your live input here
const videoElement = document.getElementById("output-video");
const client = new WHEPClient(url, videoElement);Пока автор ведёт трансляцию, зрители видят её в браузере с задержкой менее 1 секунды.
Вы также можете использовать этот URL-адрес с любым клиентом, поддерживающим Протокол вывода WebRTC через HTTP (WHEP) ↗. См. поддерживаемые клиенты WHEP список протестированных нами клиентов с подтверждённой совместимостью с Cloudflare Stream.
Использование WebRTC в нативных приложениях
Если вы разрабатываете нативное приложение, приведенный выше пример кода можно выполнить внутри WkWebView (iOS) ↗, WebView (Android) ↗ или используя react-native-webrtc ↗. Если вам нужно использовать WebRTC без webview, вы можете использовать нативные Java и Objective-C SDK от Google реализации API WebRTC ↗.
Отладка WebRTC
- Chrome: Перейдите в
chrome://webrtc-internalsчтобы просмотреть подробные журналы и графики. - Firefox: Перейдите в
about:webrtcчтобы просмотреть информацию о сеансах WebRTC, аналогично Chrome. - Safari: Чтобы включить журналы WebRTC, откройте вкладку настроек в инспекторе (значок шестерёнки) и в раскрывающемся меню установите для журналирования WebRTC значение "Verbose".
Поддерживаемые клиенты WHIP и WHEP
Помимо примеров клиентов WHIP и WHEP, использованных выше, мы протестировали и подтвердили совместимость с Cloudflare Stream следующих клиентов:
WHIP
- OBS (Open Broadcaster Software) ↗
- @eyevinn/whip-web-client ↗ (TypeScript)
- whip-go ↗ (Go)
- gst-plugins-rs ↗ (плагины GStreamer, написанные на Rust)
- Larix Broadcaster ↗ (бесплатные приложения для iOS и Android с WebRTC на основе Pion, доступен SDK)
WHEP
- @eyevinn/webrtc-player ↗ (TypeScript)
- @eyevinn/wrtc-egress ↗ (TypeScript)
- gst-plugins-rs ↗ (плагины GStreamer, написанные на Rust)
По мере появления новых клиентов WHIP и WHEP мы намерены поддерживать их и полностью соответствовать обоим протоколам.
Поддерживаемые кодеки
- VP9 ↗ (рекомендуется для максимального качества)
- VP8 ↗
- h264 ↗ (Constrained Baseline Profile Level 3.1, называемый
42e01fв SDP-предложении в полеprofile-level-idпараметр.)
Соответствие спецификациям WHIP и WHEP
Cloudflare Stream полностью поддерживает все аспекты WHIP ↗ и WHEP ↗ спецификации, включая:
Вы можете узнать точную используемую версию WHIP и WHEP в protocol-version заголовок в ответах WHIP и WHEP API. Значение этого заголовка указывает на слаг черновика IETF для каждого протокола. В настоящее время Stream использует draft-ietf-wish-whip-06 (ожидается, что это будет финальная редакция черновика WHIP) и draft-murillo-whep-01 (самый актуальный черновик WHEP).
Ограничения на этапе бета-тестирования
- Запись пока не поддерживается (скоро появится)
- Симулкастинг (рестриминг) пока не поддерживается (скоро появится)
- Количество зрителей прямой трансляции пока не поддерживаются (появятся позже)
- Аналитика пока не поддерживаются (появятся позже)
- WHIP and WHEP must be used together, we do not yet support streaming using RTMP/SRT and playing using WHEP, or streaming using WHIP and playing using HLS or DASH. (coming soon)
- После перехода в статус GA трансляции через WebRTC будут тарифицироваться так же, как остальные функции Cloudflare Stream: по минутам хранения и минутам доставленного видео.