Перейти к содержимому
Продукты

WebRTC/WHEP

Alta доставляет живое видео с малой задержкой по WebRTC с помощью WHEP (WebRTC-HTTP Egress Protocol). Плеер отправляет SDP offer HTTP-запросом, а Alta отвечает видеопотоком.

  • Вариант канала использует ресивер с источником rtsp://. Для других источников WHEP недоступен.
  • Поток содержит видеодорожку с кодеком H.264 или H.265. Поддержка H.265 зависит от браузера.
  • Зритель может напрямую подключиться к серверу Alta: Alta не использует серверы STUN или TURN.
  • Запросы отправляются на OTT Server, а не на API Server. Подробнее в разделе HTTP-сервер.
Окно терминала
http://<server-address>:<ott-port>/whep/<channel-path>/<variant>
  • channel-path: путь канала.
  • variant: название варианта канала, например hd.
  • POST <whep-url> с SDP offer в теле запроса. Alta отвечает 201 Created с SDP answer в теле и URL сессии в заголовке Location: /whep/<channel-path>/<variant>/session/<id>.
  • DELETE <session-url> завершает сессию.
  • На OPTIONS <whep-url> Alta отвечает 204 No Content и заголовками CORS. Alta разрешает любой origin для WHEP-запросов.

Trickle ICE не поддерживается. Отправляйте offer после завершения сбора ICE.

Если у канала есть Authorizer, он проверяется для запросов POST и DELETE. Отклонённый запрос получает 403 Forbidden.

Минимальный браузерный плеер:

const pc = new RTCPeerConnection()
pc.addTransceiver('video', { direction: 'recvonly' })
pc.ontrack = (event) => {
document.querySelector('video').srcObject = event.streams[0]
}
await pc.setLocalDescription(await pc.createOffer())
if (pc.iceGatheringState !== 'complete') {
await new Promise((resolve) => {
pc.addEventListener('icegatheringstatechange', () => {
if (pc.iceGatheringState === 'complete') resolve()
})
})
}
const response = await fetch('http://alta.example.com:8101/whep/discovery/hd', {
method: 'POST',
headers: { 'Content-Type': 'application/sdp' },
body: pc.localDescription.sdp,
})
await pc.setRemoteDescription({ type: 'answer', sdp: await response.text() })

Добавьте <video autoplay muted playsinline></video> на страницу, чтобы воспроизвести поток.

  • 404 Not Found: канал или вариант не существует, либо его источник не является URL rtsp://.
  • 403 Forbidden: авторизатор канала отклонил запрос.
  • 500 Internal Server Error: у варианта пока нет видеодорожки с поддерживаемым кодеком, либо SDP offer некорректен.