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