Saturday, July 05, 2014

:: Gravar sessão de game no PC com baixo impacto na performance ::

EDITADO em 08/07/2014 para inserção de novas infos

E não é que um sábado chuvoso pode ser proveitoso, intelectualmente falando?

Boa parte dos gamers curte gravar suas sessões de jogatina. Seja pra analisar como foi seu desempenho e tentar melhorar (usualmente quem joga competitivamente faz isso), pra mostrar alguma jogada legal para os amigos, ou mesmo pra se exibir (tem muito nego que faz isso no youtube).

Muito antigamente, a gente ligava o videogame num video cassete e gravava ahahahahahah Sim, fiz um bom tanto disso. Hoje em dia, com as novas tecnologias, temos as seguintes possibilidades (talvez eu não liste todas, mas...):
  1. Liga o videogame/PC num dispositivo de gravação (ex: Avermedia Live Gamer Portable ou Elgato Game Capture)
  2. Faz a gravação usando uma placa de captura de video
  3. Usa um software de captura de video no próprio PC onde se está jogando (nesse caso os videogames dançam)
  4. Faz streaming da jogatina para um servidor e a gravação fica por conta desse servidor.
  5. Usa uma câmera para filmar a tela da TV/Monitor.
As opções #1 e #2 são boas em termos de performance, mas são caras, ainda mais em se tratando de Brasil. A #5 é uma boa opção por não afetar a performance do jogo, porém a qualidade do audio e video pode ficar comprometida, bem como, dependendo do dispositivo usado (camera digital ou celular), pode ficar complicado no que diz respeito a espaço para armazenamento. A opção #3 é barata, porém afeta a performance do jogo, pois acaba havendo queda de FPS (frames por segundo). A opção #4 fica, em termos de impacto de performance, abaixo das #1 e #2, mas acima da #3.

Porém, não é qualquer um que consegue ter um link de internet decente para fazer streaming das suas sessões de game com uma qualidade decente e, AINDA POR CIMA, conseguir jogar sem que esse streaming gere lag na sua conexão.

Pois bem, há um bom tempo eu uso o OBS (Open Broadcast Software) para gravar minhas sessões de game (usualmente SF4). Como explicado acima, ficava na #3. Mas eu queria poder gravar minha sessões sem afetar tanto assim o jogo. A #4, pra mim, é totalmente inviável, visto que a Oi/Velox, na minha cidade, me fornece apenas 512kbps de upload. Um lixo!

O OBS pode fazer streaming para serviços como TwitchTV (entre outros), mas né... meu link... Então eu pensei "Será que consigo fazer o OBS mandar o stream do jogo para um servidor LOCAL, e esse servidor gravaria a jogatina?" Dei uma pesquisa HOJE e descobri que existe um módulo para o NGINX que faz essa magia. Então a coisa fica assim:

  1. OBS pega o audio e video do jogo, gera um stream e manda para o NGINX
  2. NGINX pega o stream e grava em um arquivo de video (FLV)
Notar que o impacto, na parte de I/O (Entrada/Saída), ou seja, a gravação do video em arquivo, fica no servidor.

Então para isso precisamos de dois equipamentos: o PC onde se vai jogar e um outro que vai fazer a gravação (PC, notebook, servidor, etc)

No meu teste utilizei o Media Server que tenho em casa, um SheevaPlug (processador ARM 1.2Ghz e apenas 512MB de memória, bem fraquinho) rodando Debian. Então rodei um replay da ultima partida de SSF4AE2012 que eu tinha e mandei o OBS fazer o streaming. Depois da partida terminada, parei o OBS e fui olhar no servidor. Tinha um arquivo FLV gravado. Rodei esse arquivo com o VLC e, para minha grande surpresa, lá estava a partida perfeitinha, em 1280x720@60fps, do jeito que eu tinha configurado no OBS.

Edit: fiz uns testes mais sérios pra ver o impacto de performance. Rodei o SSF4AE2014 (PC) sem estar gravando ou streaming.

  1. Entrei no Benchmark do jogo e o resultado ficou mais ou menos em 221fps. Fiz esse teste várias vezes seguidas
  2. Fiz o Benchmark de novo, só que agora mandando o stream pro meu servidorzinho. A perda foi de cerca de 10fps. Fiz esse teste várias vezes
  3. Fiz o Benchmark mais umas vezes, agora deixando o OBS gravar o video direto no meu PC. A perda foi de quase 20fps. Fiz esse teste várias vezes.
Ou seja, acho que é viável o uso dessa solução (OBS+Nginx).

Edit 2: Meu amigo Rain falou das tecnologias das placas de video atuais em que dá pra fazer a própria VGA fazer o encoding de video, liberando assim a CPU da máquina, o que deve diminuir ainda mais a perda de FPS do jogo. Porém como minha VGA é meio velha (AMD Radeon HD 5850), ela não suporta essa funcionalidade. Então, na minha atual conjuntura, o jeito é usar OBS+Nginx mesmo.

Edit 3: Como minha VGA é velha e não tem suporte ao que citei logo acima, insisti nas pesquisas. Tentei achar um jeito de conseguir diminuir ainda mais o impacto na performance dos games enquanto estiver fazendo streaming pro meu servidor. E o "pior" é que encontrei. Descobri a funcionalidade QUICK SYNC, presente em processadores Intel mais novos (não, não precisa ser da última geração). Meu processador é um Intel Core i7-4770. Dei uma lida rápida nos specs dele e sim, possui suporte a Quick Sync. O que isso faz? Utiliza a GPU (sim, processador gráfico) que esses processadores da Intel tem internamente para fazer processamento de video, encoding, etc. Além de ter um processador com suporte a Quick Sync, a Motherboard (Placa-mãe) precisa ter uma saída de vídeo. Então os passos para o habilitar são relativamente simples:


  1. Na BIOS do computador, habilitar a iGPU ou placa de video onboard
  2. Baixar e instalar o driver atualizado para a placa de video onboard (isso deve requerer um reboot do PC)
  3. Habilitar o uso dessa placa nas configurações de video do Windows. Não é preciso ter um monitor conectado à saída de video onboard do PC. Basta habilitar esse display.
  4. Agora abra o OBS, vá nos Settings (configurações) e na área de Encoding deve liberar a opção para marcar Quick Sync.
Feito, com isso o encoding será feito pela GPU do seu processador, liberando "mais gás" pra CPU. Ah sim, enquanto não habilitamos isso, essa iGPU fica inativa por toda a eternidade ;)

Complementando, ontem fiz novos testes, diferente. Instalei o FRAPS no meu PC apenas para que ele fizesse o benchmark dos FPS enquanto eu rodava um replay no SSF4AE (lembrando que o jogo roda a 60fps).

  1. Rodei o replay, mandei o Fraps fazer o benchmark por 60s, sem o OBS fazer streaming. Resultado: 60fps no jogo
  2. Rodei o mesmo replay, Fraps fazendo benchmark por 60s, com o OBS fazendo streaming para meu server e encoding via Quick Sync. Resultado: 60fps no jogo
Então agora, criançada... vou gravar MUITA SESSÃO DE GAMES hehehehehehe

Ah sim, a dica de como fazer a magia acontecer eu peguei aqui: https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/

"Esses negros maravilhosos!" (ROBERTO, Luis. 2014)

Thursday, June 26, 2014

:: Dojo - 3 ::

Bom, o Alef, do grupo Street Fighter (Facebook) viu uns videos no meu canal do Youtube e pediu pra passar algumas dicas sobre Gouken, já que ele está começando a brincar com o personagem. Então aproveitei e fiz mais um "episódio" do Projeto Dojo.

Vejam bem, são dicas BÁSICAS do Gouken. Para quem está começando a brincar com esse personagem, pode vir a ser um pouco útil.



Quando der faço algo um pouco mais avançado, se for do interesse de alguém.

Por hoje deu!


Saturday, May 03, 2014

:: Ser Pai ou Mãe ::

Já faz tempo que penso em escrever sobre este assunto. Então depois de conversar com uma amiga brasileira que mora no Canada e que já viu muita gente voltar para o Brasil, resolvi que chegou a hora de postar.

Antes de mais nada, peço que os mimizentos do politicamente correto parem de ler e vão encher o saco de outras pessoas no Facebook. O que vou escrever aqui são minhas opiniões sobre o assunto e são direcionadas tanto a Pais quanto Mães. Mas para me poupar tempo vou usar as palavras "pai" ou "pais" por pura comodidade. Porém sempre estarei querendo dizer "pai e mãe".

Bora lá!

Como vejo, querer ser pai, não é deveria significar querer colocar no mundo alguém para ter sempre por perto, sob nosso controle. Se tu achas que paternidade/maternidade é isso, então pare por aí. Se ainda não tiveste um fiho, não o tenha. Se o que almejas é ter uma criatura sempre por perto, sob seu controle, etc, melhor adotar um animal de estimação, seja ele cão, gato, peixe, etc. Filho, ser humano, não é para isso.

Filho é para ser cuidado, educado, guiado até ter idade de "se virar", de encarar o mundo por conta própria. Sim, nós pais não deixamos de nos preocupar com nossos filhos, desde quando nascem até..... até o final dos tempos.

Pais não devem querer escolher a profissão dos filhos. Sim, muitos pais sonham que seus filhos sejam pessoas importantes, médicos, advogados, engenheiros, etc. Mas se o filho escolhe outro caminho, que assim seja. Acredito que os pais só devem interferir quando os filhos escolhem CAMINHOS ERRADOS. Que caminhos são esses? Caminhos que levem à ilegalidade, criminalidade, etc.

Quando eu era pequeno (não lembro a idade com exatidão), de tanto ouvir adultos dizerem "meu filho será isso ou meu filho será aquilo..." acabei perguntando "Pai, o que tu quer que eu seja quando crescer?" Ao que meu pai respondeu "Nem eu nem tua mãe vamos escolher o que tu vais ser quando crescer. Quem vai escolher é tu. O principal é tu escolher uma profissão que goste. Se tu trabalhar no que gosta e for bom no que faz, o sucesso profissional e financeiro é pura consequência." É por causa de conversas e conselhos desse tipo, que tive tanto dele quanto da minha mãe, que hoje escrevo este post.

Outro exemplo que meus pais me deram quando era pequeno, foi a conversa que tiveram com minha avó. Mudamo-nos para muito longe de Santa Maria quando eu tinha apenas três anos de idade. Então meu pai disse para minha avó que era muito grato por todo o carinho, educação e cuidado que ela teve com ele, mas que agora (a partir do casamento dele e do nascimento dos filhos), nós éramos a família dele, que a principal preocupação dele seria essa família. Mas claro, na medida do possível, ajudaria minha avó e os irmãos dele.

É a partir dessas situações e ensinamentos que eu digo: Não devemos criar nossos filhos para ficarem debaixo de nossas asas. Filhos não devem ser criados PARA A GENTE. Eles devem ser criados PARA O MUNDO. Eles devem ficar sob nossas asas até poderem voar por conta própria (como fazem os pássaros). Daí pra frente, devemos deixá-los tocar suas vidas.

Seu filho é adulto e quer morar na outra ponta do Brasil? Deixe-o ir. Ele quer ir morar em outro país? Deixe-o ir. Ficar choramingando que os filhos estão longe muitas vezes MINA a felicidade deles. Se ele tiver vontade fraca, irá ceder e voltar para perto (ou debaixo) da sua asa e, muito provavelmente, vai se arrepender, algum tempo depois, de ter cedido, mas então será tarde demais.

Ah, nunca pensou em ter filhos ou já pensou bastante e resolveu não os ter? Tranquilo! É um diretio seu e de sua esposa. Entendo e respeito decisões como essa perfeitamente. Por incrível que pareça, tem gente que não entende ou aceita essa escolha. Sabe como é, gente atrasada.

Agradeço aos meus pais pelas orientações, educação e exemplos que deram tanto a mim quanto minhas irmãs.

Bom, estou cansado por conta do feriado (por incrível que pareça). Então vou parando por aqui. Quero só ver se este post vai gerar discussão/debate/mimimi, apesar de não o ter escrito com o intuito de "causar", mas sim de tentar ajudar algumas pessoas a serem menos apegadas aos pais/filhos, de forma a que toquem suas vidas, sejam felizes seguindo seus projetos.

See ya!

Thursday, April 10, 2014

:: Dojo - 2 ::

Volto com novidades! Mas antes, aviso que coloquei uma pequena errata no post anterior sobre algumas coisas que falei erroneamente.

Bom, no post de hoje a contribuição vem do ELEJB, um dos melhores jogadores de Gouken do Brasil (senão o melhor) na atualidade.

Sem mais delongas...



Vale lembrar que o Dojo não é um projeto apenas sobre Gouken. Acontece que eu jogo com esse personagem, o ELEJB também. Mas vou catar dicas de outros personagens pra compartilhar. Fiquem calmos ;)

Até o próximo "episódio".

Thursday, April 03, 2014

:: Projeto Dojo ::

Bom, hoje dou início ao Dojo. É um projeto pessoal em que vou fazer vídeos com dicas e experimentações no game Super Street Fighter 4 Arcade Edition (futuramente será no Ultra Street Fighter 4). Pra que isso? Bom, as experimentações eu faço sozinho, sem gravação nem nada. Mas, nesse caso, apenas eu aprendo alguma coisa, certo? Fazendo os vídeos e colocando na Internet, mais gente pode se beneficiar desses testes.

"Ah, quer posar de top player e ensinar os outros é?"

Não! Sei muito bem que estou longe, beeeeem longe de ser um top player. Mas se apenas UMA PESSOA aprender alguma coisa com esse vídeo e melhorar seu gameplay, pra mim já está bom, terei alcançado o objetivo do projeto.

Claro que jogadores experientes não vão assistir meus vídeos (bom, talvez assistam pra dar risadas). A ideia é ajudar os novatos e talvez jogadores de nível intermediário. Sejam eles pessoas que só jogam casualmente ou que estão querendo evoluir pra jogar competitivamente.

Esse projeto surgiu da minha intenção de passar algumas dicas pra galera que joga comigo, offline, aqui em Alegrete. Mas como a gente não se encontra com muita frequência (é, o pessoal estuda, trabalha, tem família, etc), pensei em fazer uns vídeos pra deixar umas dicas que os interessados poderiam ver quando tivessem um tempo livre, e praticar/testar depois.

Pra que isso? Ué, para que eu e meus amigos consigamos subir nosso nível meio juntos. Não adianta uma pessoa descobrir/aprender coisas no game, subir seu nível, se os outros sobem mais devagar. Aí quando a galera se encontra pra jogar (sejam partidas casuais ou torneios), a desvantagem é muito grande. Sem falar que por não ter adversário à sua altura (ou melhores), o cara acaba estagnando ou crescendo muito devagar.

"Ah, ó aí, está se achando o bonzão da cidade"

Não, não mesmo. Acontece que, pelo que me consta, quem joga SF mais seguido somos eu e o Leonardo (um dos meus amigos). Então a gente treina, assiste videos, pesquisa aqui e ali com mais frequência que os outros. Então a tendência é que a gente melhore um pouco mais rápido que os outros. E justamente a ideia do projeto é ajudar o resto da galera a elevar o nível de jogo junto comigo. Se ficarem melhores que eu, MELHOR AINDA!

Bom, chega de bla bla bla. Aqui está o primeiro vídeo do Dojo. Ficou mais longo do que deveria, pois errei bastante coisa. Mas como não estou com tempo pra editar o video e cortar esses erros, foi como estava. Até mesmo pra ficar mais claro que EU NÃO ME ACHO TOP PLAYER NEM PORRA NENHUMA. Sou apenas mais um mirim tentando melhorar e que, naturalmente, erra muito durante o processo.

 


ERRATA:
1- Cometi alguns equívocos durante a gravação do vídeo acima. O Keoma, ELEJB e o Diogo confirmaram que dá sim para executar o segundo ataque do CoD "low" (ou seja, que acerta embaixo) e portanto tem que ser defendido low.
2- O que eu disse sobre o Abel ficar em desvantagem de -3, -9 e -35 frames quando defendemos o CoD, é quando ele faz o primeiro ataque e pára (-3f); faz o primeiro, faz o segundo ataque e pára (-9); faz os dois primeiros ataques, faz o terceiro e pára (-35). Se ele fizer todos os ataques em sequência, não temos todos esses frames de brecha para iniciar um contra-ataque.
3- Como o ELEJB me falou, o EX Tatsu do Gouken acerta o Abel entre o primeiro e segundo ataque do CoD não por ser rápido, pois ele tem 7f de startup (que é lento), mas sim por ter uma boa invencibilidade (do 1 ao 8f)