Videoconferencia webRTC en una caja (monolito C)
tiny-webrtc-gw: un servidor de conferencias webRTC "monolito" escrito en C/C++
¡Bienvenido al archivo Léame de tiny-webrtc-gw!
Objetivos
- Transmisiones de duración infinita ⌚ (¿seguridad? amigable)
- habitaciones privadas
- Enlaces para unirse con 1 clic
- VP8, VP9, H.264
- Multiplexación de flujo muy rápida a través de C liviano
- NO hay nube ni STUN/TURN externo involucrado, ergo: raspberry-pi + LAN con espacio de aire
- Velocidades de bits SD/HD
- Alto rendimiento: ~68Mbit/seg por flujo+hilo en un ARM7 de 800Mhz
- UX amigable estilo sala de chat (por ejemplo, justin.tv)
Características
- Transmisión de 1-muchos de muy baja latencia
- Compatibilidad con transmisión HD (a través de restricciones de medios)
- sala de chat de texto
- altamente escalable (código nativo c/c++)
- cifrado de extremo a extremo
- Compatibilidad con Chrome/Firefox/Opera/Safari (iOS)
- compilación fácil (solo git checkout --recursive y "hacer todo")
- seleccionar dispositivos multimedia
- El código incluye un submódulo que hace referencia al servidor HTTPS independiente + certificado de ejemplo.
- Funciona directamente con OBS a través de WHIP
Manifestación:
?Lobby de chat en un raspi4; ☝URL de WHIP (para OBS)
Fotos:
Advertencias:
dado que los navegadores no permiten que webRTC se negocie sin cifrar (https), necesitará ejecutar una interfaz SSL delante del servidor http integrado (consulte config.txt para ese puerto). Existen muchas funciones integradas mejores, pero yo uso una herramienta que escribí como proxy [https://github.com/justinb01981/SSLTools] (tal vez solo use un certificado autofirmado (gratuito) generado por openssl(2) por ahora e impórtelo en el navegador/almacén de confianza de certificados del sistema operativo del conferenciante)
Edificio:
La compilación requiere 'ir' para compilar aburridossl (así que instale esos paquetes) desde el directorio base, simplemente ejecute 'hacer todo'.
Etc:
- 15/8: NO es necesaria ninguna configuración del host (más allá de hacer que los puertos sean accesibles); esto es posible con el nuevo código stun_client.c, pero en redes aisladas, config.txt es el camino a seguir.
- 14/9: Próximamente compatibilidad con transmisión OBS-direct (sin navegador): consulte https://webrtchacks.com/webrtc-cracks-the-whip-on-obs/
- construyendo una URL compartida:
<your_https_prefix>/content/index_broadcast.html?joinroom=<roomname>&camera=0
--- por ejemplo, https://tinyurl.com/jbhatestypingthis
(drops a user in "lobby" with camera disabled)