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.
Requisitos
Seção intitulada “Requisitos”- 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.
URL WHEP
Seção intitulada “URL WHEP”http://<server-address>:<ott-port>/whep/<channel-path>/<variant>- channel-path: caminho do canal.
- variant: nome da variante do canal, por exemplo
hd.
Protocolo
Seção intitulada “Protocolo”POST <whep-url>com a oferta SDP no corpo da requisição. O Alta responde201 Createdcom a resposta SDP no corpo e a URL da sessão no cabeçalhoLocation:/whep/<channel-path>/<variant>/session/<id>.DELETE <session-url>encerra a sessão.OPTIONS <whep-url>é respondido com204 No Contente 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.
Exemplo
Seção intitulada “Exemplo”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.
Solução de problemas
Seção intitulada “Solução de problemas”- 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.