Arquitetura de serviço de streaming amador para DOS Games

Recentemente, escrevi um pequeno artigo sobre streaming de jogos DOS em um navegador. É hora de fazer uma pequena revisão técnica. O projeto está sendo conduzido exclusivamente por mim, então eu o posiciono como amador. Entre as tecnologias publicamente disponíveis que permitem streaming de jogos, apenas WebRTC pode ser distinguido nele e meu serviço é construído. Como você provavelmente já deve ter adivinhado, ele consiste em um navegador e uma parte do servidor.





Parte do navegador



O principal componente do serviço é o servidor Janus WebRTC. Pronto para usar, ele fornece uma API simples para conexão com o servidor e suporte ao protocolo WebRTC. Portanto, a parte do navegador acabou sendo a mais simples possível, como um invólucro da API Janus .



Parte do servidor



No dosbox do lado do servidor , ffmpeg e Janus são usados . Eles são todos reunidos em um contêiner docker.



A versão atual do serviço usa:



  • Versão mais recente dosbox
  • Versão mais recente do ffmpeg compilado com suporte para codecs vp9 e opus
  • A última versão do janus com pequenas adições (sobre eles abaixo)




Streaming de áudio e vídeo



Quando o docker é iniciado, o supervisor inicia todos os três programas. Dosbox inicia o jogo e começa a gerar frames e sons continuamente. Esses dados são redirecionados para ffmpeg, que cria dois fluxos RTP (som, vídeo). O plugin de streaming do Janus ( componente padrão ) escuta esses fluxos e gera dados WebRTC para o navegador.



{dosbox} --> {ffmpeg} --> {janus streaming plugin} --> {browser}









Suporte de teclado



Os feeds de dados WebRTC são usados ​​para dar suporte a ações do jogo (cliques de botão). Cada vez que o jogador clica no botão, o manipulador de teclado do navegador é acionado. Ele envia comandos de texto através do canal de dados para o servidor.



  • pipe kdown - quando o botão é clicado
  • pipe kup - quando o botão é solto




No servidor, esses dados são processados ​​por minha extensão ( código-fonte ). Um pipe nomeado é criado no qual os comandos de entrada são registrados. Por outro lado, o dosbox lê constantemente esse pipe e adiciona eventos de teclado à fila para processamento. Os canais de dados operam em um modo ordenado, a vida útil de um pacote é de 16 ms. Essa. os eventos de teclado serão entregues na ordem em que foram pressionados.



{browser} --> {janus data text channel} --> {pipe} --> {dosbox}













A infraestrutura



O serviço é lançado na plataforma Amazon. Uma nova tarefa Fargate é criada para cada cliente. Depois de iniciada, a tarefa recebe um IP público, que é enviado ao navegador. Ao receber um IP, o navegador inicia uma conexão WebRTC com o servidor Janus. Quando o dosbox termina, a tarefa Fargate pára automaticamente. Tecnicamente, não há limite para o número de jogadores simultâneos.



{browser} --> {+fargate} --> {ip} --> {browser}

...

{browser} --> {stop} --> {-fargate}









Em vez de uma conclusão



Aconteceu muito superficialmente,



Aconteceu muito superficialmente, até eu entender sobre o que escrever com mais detalhes. Em geral, a arquitetura provou funcionar bastante. O serviço é gratuito, você pode experimentá-lo aqui .



Artigo de revisão: DOS Cloud Gaming



All Articles