Pular para o conteúdo
Produtos

WebRTC/WHEP

O Alta entrega vídeo ao vivo com baixa latência por WebRTC usando o WHEP (WebRTC-HTTP Egress Protocol). Um player envia uma oferta SDP com uma requisição HTTP, e o Alta responde com o stream de vídeo.

  • A variante do canal usa um receptor com uma origem rtsp://. O WHEP não está disponível para outras origens.
  • O stream tem uma trilha de vídeo com codec H.264 ou H.265. O suporte ao H.265 depende do navegador.
  • O espectador consegue acessar o servidor Alta diretamente: o Alta não usa servidores STUN ou TURN.
  • As requisições vão para o OTT Server, não para o API Server. Saiba mais em Servidor HTTP.
Terminal window
http://<server-address>:<ott-port>/whep/<channel-path>/<variant>
  • channel-path: caminho do canal.
  • variant: nome da variante do canal, por exemplo hd.
  • POST <whep-url> com a oferta SDP no corpo da requisição. O Alta responde 201 Created com a resposta SDP no corpo e a URL da sessão no cabeçalho Location: /whep/<channel-path>/<variant>/session/<id>.
  • DELETE <session-url> encerra a sessão.
  • OPTIONS <whep-url> é respondido com 204 No Content e cabeçalhos CORS. O Alta permite qualquer origem para requisições WHEP.

O Trickle ICE não é suportado. Envie a oferta depois que a coleta de ICE for concluída.

Se o canal tiver um autorizador, ele é verificado nas requisições POST e DELETE. Uma requisição negada recebe 403 Forbidden.

Um player mínimo para navegador:

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

Adicione <video autoplay muted playsinline></video> à página para reproduzir o stream.

  • 404 Not Found: o canal ou a variante não existe, ou a origem dele não é uma URL rtsp://.
  • 403 Forbidden: o autorizador do canal negou a requisição.
  • 500 Internal Server Error: a variante ainda não tem uma trilha de vídeo com um codec suportado, ou a oferta SDP é inválida.