Saltearse al contenido
Productos

WebRTC/WHEP

Alta entrega video en vivo con baja latencia mediante WebRTC usando WHEP (WebRTC-HTTP Egress Protocol). Un reproductor envía una oferta SDP con una solicitud HTTP y Alta responde con la transmisión de video.

  • La variante del canal usa un receptor con un origen rtsp://. WHEP no está disponible para otros orígenes.
  • La transmisión tiene una pista de video con códec H.264 o H.265. La compatibilidad del navegador con H.265 depende del navegador.
  • El espectador puede acceder directamente al servidor de Alta: Alta no usa servidores STUN ni TURN.
  • Las solicitudes se envían al OTT Server, no al API Server. Más información en Servidor HTTP.
Ventana de terminal
http://<server-address>:<ott-port>/whep/<channel-path>/<variant>
  • channel-path: Ruta del canal.
  • variant: Nombre de la variante del canal, por ejemplo hd.
  • POST <whep-url> con la oferta SDP en el cuerpo de la solicitud. Alta responde 201 Created con la respuesta SDP en el cuerpo y la URL de la sesión en el encabezado Location: /whep/<channel-path>/<variant>/session/<id>.
  • DELETE <session-url> finaliza la sesión.
  • OPTIONS <whep-url> se responde con 204 No Content y encabezados CORS. Alta permite cualquier origen para las solicitudes WHEP.

Trickle ICE no es compatible. Envíe la oferta cuando la recopilación de ICE haya finalizado.

Si el canal tiene un autorizador, se comprueba en las solicitudes POST y DELETE. Una solicitud denegada recibe 403 Forbidden.

Un reproductor de navegador mínimo:

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() })

Agregue <video autoplay muted playsinline></video> a la página para reproducir la transmisión.

  • 404 Not Found: El canal o la variante no existe, o su origen no es una URL rtsp://.
  • 403 Forbidden: El autorizador del canal denegó la solicitud.
  • 500 Internal Server Error: La variante aún no tiene una pista de video con un códec compatible, o la oferta SDP no es válida.