Recientemente escribí un breve artículo sobre la transmisión de juegos DOS en un navegador. Es hora de hacer una pequeña revisión técnica. El proyecto está siendo realizado exclusivamente por mí, por lo que lo posiciono como amateur. Entre las tecnologías disponibles públicamente que permiten la transmisión de juegos, solo WebRTC se puede distinguir
y mi servicio está construido. Como probablemente ya adivinó, consta de un navegador y una parte del servidor.
Parte del navegador
El componente principal del servicio es el servidor Janus WebRTC. De fábrica, proporciona una API simple para conectarse al servidor y admitir el protocolo WebRTC. Por lo tanto, la parte del navegador resultó ser lo más simple posible, en forma de envoltorio sobre la API de Janus .
Parte del servidor
En el lado del servidor , se utilizan dosbox , ffmpeg y Janus . Todos se recogen juntos en un contenedor docker.
La versión actual del servicio utiliza:
- Última versión de dosbox
- Última versión de ffmpeg compilada con soporte para códec vp9 y opus
- La última versión de janus con adiciones menores (sobre ellas a continuación)
Transmisión de audio y video
Cuando se inicia la ventana acoplable, el supervisor inicia los tres programas. Dosbox lanza el juego y comienza a generar marcos y sonidos continuamente. Estos datos se redirigen a ffmpeg, que crea dos flujos RTP (sonido, video). El complemento de transmisión de Janus ( componente estándar ) escucha estas transmisiones y genera datos WebRTC para el navegador.
{dosbox} --> {ffmpeg} --> {janus streaming plugin} --> {browser}
Soporte de teclado
Las fuentes de datos de WebRTC se utilizan para respaldar las acciones del juego (clics de botones). Cada vez que el jugador hace clic en el botón, se activa el controlador del teclado del navegador. Envía comandos de texto a través del canal de datos al servidor.
- pipe kdown - cuando se hace clic en el botón
- pipe kup - cuando se suelta el botón
En el servidor, estos datos son procesados por mi extensión ( código fuente ). Se crea una tubería con nombre en la que se registran los comandos entrantes. Por otro lado, dosbox lee constantemente esta canalización y agrega eventos de teclado a la cola para su procesamiento. Los canales de datos operan en un modo ordenado, la vida útil de un paquete es de 16 ms. Aquellos. Los eventos de teclado se entregarán en el orden en que se presionaron.
{browser} --> {janus data text channel} --> {pipe} --> {dosbox}
Infraestructura
El servicio se lanza en la plataforma Amazon. Se crea una nueva tarea de Fargate para cada cliente. Después de comenzar, la tarea recibe una IP pública, que se envía al navegador. Al recibir una IP, el navegador inicia una conexión WebRTC con el servidor Janus. Cuando finaliza dosbox, la tarea de Fargate se detiene automáticamente. Técnicamente, no hay límite para el número de jugadores simultáneos.
{browser} --> {+fargate} --> {ip} --> {browser}
...
{browser} --> {stop} --> {-fargate}
En lugar de una conclusión
Resultó bastante superficial,
resultó bastante superficial, hasta que entendí sobre qué escribir con más detalle. En general, la arquitectura resultó ser bastante funcional. El servicio es gratuito, puedes probarlo aquí .
Artículo de revisión: DOS Cloud Gaming