videoconferência webRTC em uma caixa (monólito C)
tiny-webrtc-gw: um servidor de conferência webRTC "monolith" escrito em C/C++
Bem-vindo ao leia-me do tiny-webrtc-gw!
Metas
- Fluxos de duração infinita ⌚ (segurança? Amigável)
- quartos privados
- Links de adesão com 1 clique
- VP8,VP9,H.264
- multiplexação de fluxo muito rápida via C leve
- SEM nuvem ou STUN/TURN externo envolvido, portanto: raspberry-pi + LAN com airgapped
- Taxas de bits SD/HD
- Alto desempenho: ~68Mbit/seg por stream+thread em um ARM7 de 800Mhz
- UX amigável em estilo de sala de bate-papo (por exemplo, justin.tv)
Características
- Latência muito baixa streaming de 1-muitos
- Suporte para fluxo HD (por meio de restrições de mídia)
- sala de chat de texto
- altamente escalável (código nativo c/c++)
- criptografado de ponta a ponta
- Suporte para Chrome/Firefox/Opera/Safari (iOS)
- compilação fácil (basta git checkout --recursive e "make all")
- selecione dispositivos de mídia
- o código inclui o submódulo que faz referência ao servidor HTTPS independente + certificado de exemplo
- Funciona diretamente com OBS via WHIP
Demonstração:
?chat lobby em um raspi4; ☝URL WHIP (para OBS)
Fotos:
Advertências:
como os navegadores não permitem que o webRTC seja negociado sem criptografia (https), você precisará executar um front-end SSL na frente do servidor http integrado (consulte config.txt para essa porta). Existem muitos recursos integrados melhores, mas eu uso uma ferramenta que escrevi como proxy [https://github.com/justinb01981/SSLTools] (talvez apenas use um certificado autoassinado (gratuito) gerado por openssl(2) por enquanto e importe-o no armazenamento confiável de certificados do navegador/sistema operacional do participante da conferência)
Prédio:
build requer 'go' para compilar o boressl (então instale esses pacotes) a partir do diretório base, basta executar 'make all'.
Etc.:
- 15/08 - NÃO é necessária nenhuma configuração de host (além de tornar as portas acessíveis) - isso é possível com o novo código stun_client.c - mas em redes airgapped config.txt é o caminho a percorrer.
- 14/09 - Suporte de streaming OBS-direct (sem navegador) chegando - consulte https://webrtchacks.com/webrtc-cracks-the-whip-on-obs/
- construindo um URL de compartilhamento:
<your_https_prefix>/content/index_broadcast.html?joinroom=<roomname>&camera=0
--- por exemplo https://tinyurl.com/jbhatestypingthis
(drops a user in "lobby" with camera disabled)