12 enero 2014

[GUIA] Streaming: Del PC a tu consola Android

Streaming: Del PC a tu consola Android



Actualización

He creado una versión actualizada de esta guía, y que se puede encontrar en esta página.
En dicha guía, he dividido la información por temas, para ayudar a los lectores a centrarse directamente en los temas que le interesen.

En dicha guía se encuentran las indicaciones para hacer Gamestreaming de consolas de sobremesa a dispoitivos android (y otros).

Guía original (versión 1.0)


Nota: Para quien quiera saltarse todo el preámbulo y texto informativo que he puesto (junto con opiniones personales), puede ir directamente a la sección de "Manos a la obra"

Nota 2: Esta guía actualmente está obsoleta, sobre todo por que luego de escribirla se han implementado emulación de mandos de X360 (para el caso de splashtop), y envío de comandos XInput directos (en el caso de Splashtop), por lo que toda la sección de configuración de los mandos ya es innecesaria. Espero publicar pronto una guía actualizada con pasos mas simples para seguir para las opciones de gamestreaming existentes en la actualidad.

Uso de este artículo


Se permite utilizar este artículo, ya sea copiando entero el artículo o partes de el, o referenciándola mediante un link, a cualquiera que lo desee, con la única condición de que se mantenga el autor y un enlace a la fuente original del artículo, y que se encuentra en mi blog.

Para actualizaciones sobre este artículo, sugiero visitar el enlace mencionado anteriormente

Introducción


Ya desde hace algún tiempo que distintas tecnologías están "coqueteando" con este concepto, llevar el streaming interactivo a tal punto que sea factible de utilizar.

Han existido varias propuestas, algunas mas conocidas como OnLive (Del cual ya hablé en su momento en la revista Gadget & PC), así como Gaikai (que reconozco que aún no he probado) y otras propuestas mas fuertes como Nvidia GRID, que en resumidas cuentas, viene a ser el mismo concepto: Cloud Gaming.

¿Pero que es todo esto?


Es muy simple, estas empresas ofrecen un servicio de Juegos en la nube, o para entendernos mejor, ellos tienen los juegos, y nos ofrecen un servicio que incluye la máquina donde se ejecutan, a la cual para poder acceder e interactuar necesitamos basicamente un cliente que sea nuestra pantalla (donde se realiza el streaming del juego) y el mando para jugar (con el cual interactuar con el juego que se está ejecutando en el servidor remoto)

¿Donde está la ventaja de este modelo?


El principal fuerte/ventaja es que, en el fondo no es necesario un equipo de ultima generación para jugar juegos de última generación. Aunque suena a trabalenguas, es muy claro como concepto.

Voy a un servicio de cloud gaming, y compro/alquilo por ejemplo Assassins Creed IV Black Flag. Para ejecutarlo, simplemente voy a mi consola JXDS5110 (monocore, 512MB Ram, vamos, nada que podamos decir que sea tecnología puntera, además de que corre en Android) y gracias al cliente OnLive (o el que haya utilizado para comprar el juego), puedo jugar este título.

Lo que estoy haciendo en realidad es simplemente visualizar lo que sucede en el servidor que está ejecutando el juego. la pantalla del dispositivo simplemente reproduce el vídeo por streaming, y envía los comandos correspondientes a los controles que tiene la consola para interactuar.

Con esto, ya no hace falta comprar el último dispositivo en cuanto a tecnología (PC, Tablet, Consola) para poder disfrutar de este título. Siempre y cuando tengamos una "pantalla" que sea capaz de visualizar el contenido del vídeo por streaming, y una forma de "interactuar" con el juego (mando, pantalla táctil, etc), tendremos lo necesario para utilizar estos servicios.

Ahora, y luego de haber entendido (o conocido) como va este tema, empiezan a surgir las preguntas frecuentes que la mayoría de usuarios se pueden plantear, siendo una de las primeras la siguiente:

¿Puedo generar un servidor para que haga streaming de mis juegos en el PC?


En parte, la pregunta es retórica, por que la propia imagen de este artículo ya responde a esto.

NVidia Shield


A la pregunta anterior respondo con un "si que se puede", y es que hay un ejemplo que últimamente se ha hecho bastante popular entre los usuarios de dispositivos Android, ya que de la mano de NVidia y su producto estrella NVidia Shield han estado popularizando entre los usuarios de ambos mundos: PC y Android.

No voy a contar de que se trata NVidia Shield, por que voy a asumir que la mayoría de los que están leyendo este artículo ya saben de que va, y sino, sugiero mirar un poco por google para hacerse una idea.

Demostración de streaming de NVidia Shield. 

En el vídeo anterior se puede ver una desmostración en donde se puede apreciar un pequeño lag en el juego, eso sí, posiblemente este vídeo sea anterior a la actualización que aportó una mejora considerable en el gamestreaming, incluyendo la opción de hacer stream a 60fps con una resolución de 1080p (la versión anterior solo soportaba hasta 720p)

Como sabrán, para realizar streaming desde un PC hacia NVidia Shield es necesario varios factores, y no todos ellos simples de conseguir (basicamente, por una cuestión de costes):


  • Consola NVidia Shield. De lo mejor en cuanto a hardware que podemos adquirir actualmente (hablando de consolas android), pero el elevado precio del dispositivo lo hacen alejarse de la mayoría de usuarios que buscan una alternativa de consola android mas económica.
  • PC de sobremesa (no sirve un notebook, de momento) con una tarjeta gráfica GeForce GTX 650 como mínimo
  • Router con unas características específicas (que sea compatible, basicamente) para poder realizar un streaming correcto y fluído entre el PC y la consola NVidia Shield.

Pueden existir mas factores (como que estén alineados los planetas, jejeje) pero los anteriores son, en términos generales, los factores determinantes.

En este punto quiero hacer un pequeño análisis/opinión personal.

Entiendo que alguien quiera y pueda gastarse el dinero en una consola con lo último en hardware para ejecutar en entorno Android. Personalmente, creo que cualquier dispositivo actual con unas especificaciones y características decentes puede ejecutar la mayoría (sino todas) de las aplicaciones existentes en el market de Google. Aún así, NVidia Shield me parece un dispositivo espectacular en cuanto a rendimiento y no tengo nada que decir en este aspecto.

Por otro lado, entiendo que si tienes un ordenador con una gráfica de al menos una GeForce GTX 650, es que tiene un PC Gamer (o muy similar a lo que sería un PC Gamer), esto es, un PC con especificaciones suficientes para correr juegos modernos con una calidad de imagen bastante mejor que una consola android, e incluso que muchas consolas de sobremesa.

Lo que me cuesta entender completamente es que si ya tienes un PC Gamer (o parecido) en donde puedes disfrutar de forma cómoda de juegos modernos, con una pantalla de buena calidad y buen tamaño, y aún así quieras ejecutar esto en una consola portátil, con una pantalla mucho mas pequeña, y con los problemas potenciales que pueda presentarse a la hora de hacer streaming.

Además, realizar streaming de un PC a una Consola implica que hay 2 dispositivos dedicados para jugar a un juego, ya que el PC no se puede utilizar.

Todo esto sin mencionar que estás limitado al radio de acción que te ofrezca tu router, para que la experiencia sea buena.

Que quede claro que no es una crítica hacia las personas que quieren tener este escenario para disfrutar de sus juegos. Cada uno que los disfrute como quiera, pero es que personalmente tengo este tipo de planteamientos que no logro entender completamente.

En el mismo sentido, he estado planteándome escenarios donde personalmente si quisiera utilizar la solución de NVidia Shield.

El primer escenario, y que creo que sería el mas evidente, es que tengamos nuestro PC Gamer en el salón, conectado a la TV, y que cuando alguien esté viendo un programa de televisión, no podamos utilizar el PC. En este caso, tal como hacen muchos usuarios con PS3 y PSVita, podríamos conectarnos a nuestro PC desde NVidia Shield y jugar, sin necesidad de conectar el Televisor para ejecutar el juego.

El segundo escenario puede resultar menos evidente y mas rebuscado, pero igual de factible. Tenemos un PC dedicado a descargas y/o servidor de datos/internet/etc. El típico ejemplo podría ser un barebone que hay en muchas casas, que no tiene pantalla ni teclado, y que simplemente está encendido realizando su trabajo (descargas, subidas, ofreciendo servicios, etc). En este PC podríamos acondicionarlo para que además haga de servidor de streaming para jugar.

El tercer escenario es un caso hipotético de momento, y es que nuestro PC normal (Portátil, desktop, etc) en el cual hacemos un uso compartido para por ejemplo navegar por la web para buscar información (en mi caso, el portátil del salon se utiliza normalmente para acceder de forma regular a google, buscar información, y luego queda "disponible", esto es, no hay nadie usándolo) y que aunque no tiene un uso continuo en alguna actividad (navegar, correo, etc), tampoco pasa el suficiente tiempo "desocupado" como para jugar alguna cosa en el (siempre vendrá alguien a pedir el PC prestado un momento para buscar alguna cosa, etc). En este escenario, sería ideal que el juego se pudiese ejecutar en segundo plano (ventana minimizada o sin el foco principal), mientras deja disponible el entorno de windows para realizar otras tareas. Si se pudiese dar esta situación/escenario, creo que sería el ideal para poder jugar y sacar provecho del pc, ya que estaría dando mas de 1 servicio a la vez.

La verdad es que no he pensado mas escenarios, por que ya simplemente me queda que el PC Gamer sea el que utilizo normalmente, y en lo personal, preferiría jugar en ese PC que en una consola, lo que no significa que a otros puedan preferir jugar en la consola que en el PC (por ejemplo, tirados en la cama o, el ejemplo que mas veces he visto en los foros, echando una partida rápida en el WC)

Sea como sea, el caso es que cualquiera de estos escenarios implica unas condiciones bastante específicas y, sobre todo, no es una solución económica, y esto implica que no cualquier usuario puede optar por montar un sistema de streaming en su casa, si quiere hacerlo de la forma que NVidia Shield propone.

¿Que opciones tenemos?


Desde hace varios días que vengo indagando en el tema, buscando alternativas, y sobre todo simplificando el proceso para que cualquier usuario con un mínimo de conocimientos pueda montarse su propio sistema de streaming de juegos.

Como es evidente, ninguna solución alternativa podrá compararse con el resultado obtenido por NVidia Shield, pero eso no implica que sean malos resultados necesariamente, es mas, muchos juegos son perfectamente jugables con la solución que he estado utilizando.

No voy a contar ninguna novedad, ni he descubierto nada que no se sepa antes. Simplemente voy a resumir en la forma mas clara posible lo que hay que hacer para lograr tener resultados aceptables para poder jugar, sin gastarse el dineral que implica la solución de NVidia Shield. (o si lo prefieres, será una versión low-cost de streaming de pc)

Experimentando con opciones


Entre las alternativas que tenemos disponibles para realizar streaming desde un PC hacia Android, existen las siguientes opciones:


  • VNC Server, es un programa/protocolo muy popular para tomar control remoto de windows/linux, pero que no ofrece una calidad de streaming suficiente para poder pensar siquiera en jugar.



  • Teamviewer, al igual que el anterior, se ha hecho muy popular ultimamente para poder controlar remotamente (con frecuencia, fuera de nuestra casa) un ordenador. Si bien es cierto que la calidad y respuesta parecen bastante buenas, están muy alejadas de ser una alternativa seria para utilizar en streaming de juegos.



  • Programas de control remoto. Existen multitud de programas en la store que nos premiten tomar el control remoto de nuestro PC. Algunos utilizan protocolos conocidos como el propio VNC, otros son protocolos propios que los desarrolladores no invierten demasiado tiempo en seguir mejorando


y ya nos quedan las alternativas mas serias en este aspecto.


  • NVidia Shield PC GameStreaming, es una de las mejores alternativa existentes (*), que puede ofrecer gamestream a 60fps con una resulucion de 1080p, pero esto implica un alto coste en infraestructura, ya que necesitamos un PC Gamer con una gráfica de al menos una GFX 660 para arriba (que podemos encontrar actualmente en algunas ofertas a 160€ aproximadamente), mas un PC en condiciones para ejecutar juegos (según el faq de NVidia, un Intel Core i5 or superior, o un AMD FX 6-Core or superior que solo el procesador sin el PC ya lo encontramos por unos 100€), los demás componentes de un PCGamer (promediando, al menos unos 700€ para un pc relativamente decente) y la propia NVidia Shield (300€ mas), y lo que nos pueda faltar (un router compatible que los mas económicos pueden estar en unos 60€)
Videoreview (en inglés) mostrando el desempeño de varios juegos en streaming.


Desde ya comento que quien pueda hacerse con este combo y lo que realmente busca es streaming de sus juegos, que no lo dude, que es la mejor alternativa que puede encontrar

Pero este artículo se trata de buscar alternativas "los-cost" para hacer lo mismo que NVidia Shield (o muy parecido), y para eso ya nos quedan 2 alternativas que mencionar, en las cuales nos centraremos


  • Splashtop, suite de programas que nos ofrecen soluciones para hacer streaming, incluídas soluciones específicas para juegos.
  • Kainy, desarrollo específico para hacer streaming de juegos. Próximamente saldrá oficialmente en Steam y tendrá un cliente Linux.


Ambas alternativas ofrecen una calidad de streaming muy aceptable para poder jugar a muchos juegos, aunque ofrecen algunas diferencias en cuanto a características y que lo hacen productos distintos dentro de lo que hacen.

(*) Nota: no considero otras alternativas serias como limelight, ya que tienen unos requisitos similares a los que pide el streaming standard de NVidia Shield, y por tanto se alejan del objetivo de este artículo (una versión low-cost de gamestreaming). Gracias Seleuco por el aviso.

¿Splashtop o Kainy?


Y aquí es donde llegamos a una de las primeras cosas que debemos analizar.

Splashtop




Splashtop tiene una suite de programas que ofrecen distintos tipos de soluciones para streaming, aunque en todas ellas se utiliza el mismo "motor" o "protocolo" para transmitir audio/video y recibir interacciones desde android (ratón, teclado)

Por mencionar algunas de las alternativas que nos ofrecen tenemos:

  • Splashtop 2. Gratuíto. Para probar que tal nos va esta alternativa, es buena idea instalar este programa que nos permitirá hacer streaming sin mayores problemas. El receptor solo podrá recibir los eventos de teclado y mouse (pantalla táctil) desde el cliente, por lo que el mapeado debe ser realizado con alguna herramienta externa como GameKeyboard o similar, si queremos mapear los botones, sticks o dpad (para "transformar" los controles y botones en teclas normales de un teclado).
    En sus ultimas versioes pide comprar un tipo de suscripción, por lo que no se si será por mi cuenta android que no me permite seguir utilizandolo mas de forma gratuíta, así que sugiero probar a instalarlo y ver si os permite ejecutarlo sin problemas. Requiere Android 2.2 hacia arriba
  • Splashtop Remote Desktop. De pago (en oferta al 50% de descuento, quedando en 3.75€ al momento de escribir este artículo). En teoría es el mismo programa que Splasthtop 2, con algunas ventajas extra (que entiendo son mas bien de facilidad de uso, como busqueda automática por la red, inicio sin hacer login en la propia aplicación, etc), además de estar desarrollado para plataformas de android mas antiguas (2.2, hacia arriba)
  • Splashtop HD (oferta 50% al momento de escribir este artículo, quedando en 7.39€). Es el mismo programa que Splasthop Remote Desktop, pero optimizado para android 3.x y 4x. Requiere android 3.1 para arriba
  • Splashtop Remote PC Gaming THD (oferta 50% al momento de escribir este artículo, quedando en 7.51€). Esta versión del programa es como la Splashtop HD, pero en un principio estaba diseñada para dispositivos Tegra, pero que luego se ha ampliado su abanico de dispositivos compatibles, pudiendo ser instalado en muchos otros también. Además, incluye una funcionalidad extra, y es que permite realizar mapeos en pantalla para controles (digitales) y teclados, pudiendo reproducir estos controles en windows y, por tanto, poder mapearlos dentro de juegos.

De estas alternativas, creo que la que mejor va es la Splashtop Remote PC Gaming THD, por que a nivel de streaming todas ofrecen mas o menos el mismo resultado (bastante bueno), pero esta alternativa en concreto ofrece mas opciones para poder configurar e interactuar con nuestros juegos en PC.

Aún así, he hecho algunas pruebas para mostrar algunos ejemplos de su ejecución en distintos dispositivos.

Blades of Time, en streaming con Splashtop (Primeras pruebas)

En general el resultado del streaming es bastante bueno, sin necesidad de toquetear mucho para lograr conectar el dispositivo (tampoco existen muchas opciones que configurar)

Como se puede apreciar en el vídeo, existe cierto lag entre la pantalla y la consola, pero que en este caso no impiden jugar este título, ni otros que tampoco son tan estrictos con el input timing.

Gameplay de Crysis 2

Evidentemente, el problema de tener controles digitales puede suponer un problema a la hora de jugar ciertos títulos, que requieren un control mas preciso que sólo puede ofrecer un ratón (el control ideal), o un stick analógico correctamente configurado y calibrado (y que sea cómodo de utilizar)

En el gameplay de Crisys 2, además de mi nulo conocimiento del juego (es la primera vez que lo jugaba, aunque algo conozco de FPS), es evidente que la falta de un control analógico de precisón afecta el gameplay, ya queno puedo realizar movimientos precisos.

Nota: Este es uno de los primeros gampelays que he capturado, y estoy utilizando un sistema de mapeado de teclas en el juego.

Kainy



Por su parte, Kainy nos ofrece 3 versiones de su producto.

  • Kainy (Demo). Gratuíto. Este programa tiene las mismas funciones que su alternativa de pago, con la única limitante que muestra toda la imagen en un tono azulado (todo se presenta en gamas de azules). Antes de adquirir el programa de pago, es buena idea intentar realizar streaming desde el PC utilizando este programa, por que así podremos tener una idea bastante aproximada del resultado final que obtendremos.
  • Kainy HD. De pago (al momento de escribir este artículo, está en un precio promocional de 2.03€)- Esa versión es igual que la Demo, pero que nos mostrará la imagen a todo color, sin restricciones de ningún tipo.
  • Kainy (Steam Version), es la versión que se ha puesto en Greenlight para poder incorporar Kainy en los programas ofrecidos por Steam. Esta versión corresopnde a una versión previa de Kainy HD, y que debe ejecutarse con el propio servidor del PC de esta versión. Si se ejecuta con una versión posterior, funcionará como la versión Demo (todo azul). Nota: Esta versión está desfasada con respecto a la de android, pero ofrece la funcionalidad completa junto con su servidor windows.
Para este programa, antes que todo mis sugerencias son las siguientes:


  • Instalar la versión Steam, y descargar e instalar la versión del servidor de windows para esta versión. Una vez los tengas instalados, realizar una copia de seguridad del APK en android y del servidor en windows. Esta versión en teoría seguirá funcionando sinlimitaciones en el futuro, aunque claro está, que será una versión muy desactualizada con respecto a la oficial.
  • Una vez guardada la copia de la versión Steam (que de momento es gratuíta), podemos probar la última versión de Kainy con su Demo. Como he dicho, se verá todo en azul, pero nos servirá para ver que tanta diferencia podemos encontrar entre la versión gratis (Steam) y la versión actualizada de pago, pero desde ya puedo comentar que me he visto gratamente sorprendido por el avance que ha tenido estos últimos 2 meses, que he mos pasado de una versión que se caía constantemente y que no me daba ni para hacer una captura de un vídeo demostrativo en condiciones, pasando por las ultimas versiones que soy capaz de jugar sin problemas incluso con una baja señal wifi, como en los siguientes casos:
Burnout Paradise. En este vídeo se ve que el streaming se corta, congela o incluso se pierde la conexión. Es de las primeras pruebas con las que empecé a probar streaming hacia consolas.


Insane 2, donde se puede ver la evolución de Kainy, ya que el streaming ya no presenta problemas de cortes/desconexiones, ni mayores problemas gráficos.


Nota: A lo largo de este artículo, he realizado varias pruebas con distintos dispositivos, principalmente para no centrar el contenido de esta guía en un solo dispositivo (en teoría, es una guía genérica). Asimismo, he utilizado muchas veces los mismos juegos en distintos dispositivos, para poder hacer comparativas y poder apreciar si existen diferencias entre las ejecuciones.

También es cierto que a medida que he estado haciendo pruebas, he modificado algunos parámetros, consiguiendo en algunos casos algunas mejoras en el streaming.

Entender que lo anterior es una forma de lograr hacer comparativas (en mi caso por lo menos) para ver si las pruebas dan mejores resultados o no con ciertos parámetros.

En todo caso, voy a omitir la mayoría de pruebas y parámetros que no considere trascendentales y que lo único que harían es liar mas que ayudar a lograr el propósito final de realizar streaming de juegos desde el PC.

Otra característica a destacar de Kainy es que actualmente cuenta con un cliente PC (windows), y un cliente Chrome, lo que extiende muchísimo el abanico de posibilidades de este programa.

Con el cliente PC, podemos "replicar" un ordenador en otro ordenador para poder jugar (lo mismo que hacemos con android, pero directamente con el PC).

Con el cliente Chrome, podemos jugar a nuestros juegos de PC, directamente desde el navegadro Chrome (sin necesidad de cargar un programa windows aparte)

Lo anterior acompañado de una buena conexión internet (con una buena subida, sobre todo) podría ser una combinación muy interesante para poder ofrecernos a nosostros mismos el servicio de streaming a través de internet, y poder jugar a nuestros títulos en nuestro ordenador, desde casi cualquier dispositivo Android, ordenador con Windows, o incluso desde cualquier ordenador con Chrome instalado y que soporte plugins.


Problemas encontrados


A pesar que el resultado final es bastante sencillo de realizar, me he topado con algunos problemas en el camino.

El primero era tener un programa o solución que me permitiese realizar un streaming con una calidad aceptable de imagen y lag entre el PC y el dispositivo android. Esto ya lo solucioné utilizando o Splashtop o Kainy

El segundo, era la forma de interactuar con el juego como tal.

Las soluciones que he estado probando tienen en común que ambas sólo pueden enviar (emular) teclado y ratón en windows, no existiendo un joystick real.

Con lo anterior, se pueden jugar muchos juegos que tienen configuración de teclas (como ha sido siempre en windows), y basta con mapear en cada juego las teclas que asignemos en nuestra consola para que podamos interactuar correctamente.


Splashtop y Splashtop THD


Splashtop como solución simple sin programas terceros, resulta ser insuficiente, puesto que no tiene un sistema de mapeado de controles por lo que es necesario utilizar algún programa extra como Gamekeyboard, tincore o cualquier mapeador de los conocidos, y que permita mapear los controles y botones que tenemos en nuestro dispositivo para que envíe teclas por medio de splashtop hacia el servidor en windows.

Esta solución tiene un problema, y es que los controles analógicos se transforman en digitales, ya que el receptor en windows solo entenderá teclados o ratón como datos para reproducir.

Existe una alternativa y es utilizar un programa que lea los datos enviados desde android, y que los reproduzca como un control de juegos en windows. Esta alternativa es Droidmote, pero no es una solución definitiva como explicaré a continuación.

Droidmote




Droidmote tiene una opción para instalar un servidor en Windows, y con esto enviar los eventos de teclado, joystick y ratón (Touchpad) desde android a windows.

Para ejecutar esta solución, necesitaremos instalar la aplicación cliente en nuestro android (es gratuíta) y el servidor para windows (gratuíto, en la web del desarrollador. Requiere registro para ver los enlaces de las versiones actualizadas)

Aquí se puede descargar un rar con una versión funcional del servidor de windows, junto al instalador de los drivers necesarios para la emulación de joystick.

Una vez descargado, tanto el paquete actualizado como el enlace que he puesto, lo primero que hay que hacer es instalar los drivers. Para esto vamos a la carpeta "droidmote-win-drivers", y ejecutamos el fichero install.cmd.

Nota: Cada vez que reiniciemos windows nos pedirá instalar los drivers. Importante es ejecutar antes el uninstall.cmd para no llenar de entradas de dispositivos nuestro registro. En la versión que he puesto, he modificado el instalador para que SIEMPRE llame al uninstall.cmd, antes de instalar los drivers.


Si ejecutamos el servidor de droidmote sin haber instalado los drivers, nos avisará de que lo debemos hacer antes de ejecutarlo.



Una vez instalado, ejecutamos el servidor de windows y se quedará "escuchando" en todas las interfaces que tenemos disponibles en nuestro ordenador, por conexiones entrantes.


En android, simplemente tocamos la pantalla de la aplicación y nos aparecerá una ventana con los servidores disponibles, entre los cuales debería estar nuestro PC

Una vez que los conectamos, el servidor windows nos avisa que hemos establecido la conexión.


Ahora, si nos vamos al panel de control y miramos por los joysticks conectados al sistema,veremos que se han creado 3 entradas (en mi caso son 3, entiendo que una por cada interfaz de conexión que tengo disponible en el PC)



Vamos a la primera (en mi caso coincide con la conexión por cable que estoy utilizando para conectarme al router) y verificamos que efectivamente si movemos y presionamos los controles de la consola (en este caso, una JXDS7800B), veremos que windows responde como si fuese un mando standard.




En principio la solución funciona bien, pero tiene un inconveniente. Mientras está Droidmote en primer plano en Android, todo funcoina sin problemas, pero al ejecutarse en segundo plano para por ejemplo abrir Splashtop, Droidmote sigue trabajando, pero sólo envía datos digitales (los datos analógicos no son registrados en windows)

Otro inconveniente de esta solución, es que para que funcione Droidmote, necesita que se establezca el metodo de entrada de Android a Droidmote, con lo cual no podremos utilizar normalmente la tablet mientras estemos conectados al pc, lo cual tampoco es un gran problema, pero resulta incómodo que después de cada sesión de juego haya que reconfigurar los métodos de entrada de la tablet.

Otro problema extra que tiene esta solución es que los valores enviados a windows (valores digitales) funcionan solo con los máximos de cada rango, esto es, para una consola como JXDS7800B que tiene unos rangos mas cortos para el stick derecho, Windows NO recive valores cuando está en modo digital, puesto que el stick derecho nunca da valores máximos normales y por tanto, droidmote no puede registrarlos como movimientos.

El problema anterior tiene un añadido, y es que los diagonales no pueden ser registrados, puesto que no se puede dar el caso que los 2 ejes tengan un valor máximo de su rango, a excepción de que el movimiento del stick sea cuadrado. Dicho en otras palabras,si presiono diagonal, no estoy en el máximo del eje X y del eje Y, por tanto no se marca ninguno de los dos como movimiento, por lo que no se registra un diagonal.

Se pueden utilizar opciones como mapeadores extra para calibrar el stick y crear una zona efectiva menor, pero entrar en esa dinámica ya complica mucho todo el tema para poder jugar por streaming, y por lo menos yo lo he descartado para no seguir por ese camino.

Shank

En este vídeo se puede apreciar que efectivamente se puede jugar con esta solución, en conjunto con otras herramientas que me han permitido calibrar el joystick para sacar diagonales, pero que en conjunto creo que no es la mejor opción para jugar.

Por tanto, y luego de hacer algunas pruebas  con este método, he decidido descartarlo por que implica muchas configuraciones y ajustes en el proceso para btener el resultado deseado.


Splashtop Remote PC Gaming THD



Por otra parte encontramos este programa, que lo que hace es ofrecernos una alternativa de mapeo de controles, lo cual resulta muy conveniente para no tener que utilizar programas extra.

La característica que sobresale de este producto es la posibilidad de poder crear botones virtuales (en pantalla) para realizar acciones en el PC

Batman Arkham City ejecutado por streaming vía Splashtopt Remote PC Gaming THD


Como se puede ver en el vídeo, el gameplay se ejecuta correctamente, aunque existen ciertos aspectos a considerar con esta alternativa.

No es posible generar un mapeo directo de controles/botones hacia Windows. Si se desea establecer un control como un botón, hay que ponerlo en pantalla para, a continuación, buscar un mecanismo para poder mapear este botón en pantalla a nuestra consola física.

En este punto, se podrían generar varias alternativas para realizar el mapeo. En el caso del vídeo, he utilizado el propio mapeador de la consola JXDS7800B para mapear los controles con los que he puesto en la pantalla.

Para generar un mapeo alternativo (enviar teclas desde la consola) sin utilizar los mapeos en pantalla, es necesario utilizar un programa extra para "transformar" los controles del dispositivo en un teclado. Si bien es cierto que he explorado esta alternativa, finalmente la he desechado por que no me ha parecido práctica como resultado final, además de tener la necesidad de configurar un programa mas para realizar el envío de eventos de teclado (controles) hacia el servidor de windows.

Splashtop Remote PC Gaming THD es una solución muy interesante, pero que está pensada para dispositivos que no poseen controles físicos (Tablets), y que si tienes una consola Android, puede que no sea la mejor alternativa para jugar.


Kainy, mapeo de controles físicos y virtuales.


En el caso de utilizar Kainy, resulta bastante sencillo el poder generar un mapeo específico para jugar con un juego en windows. Tomando como base cualquier consola con un driver de joystick standard, vemos que en las opciones de Kainy es posible establecer mapeos directos de un mando, para que envíe teclas.



Como se puede ver en estas imagenes, para cada tipo de control existe una forma de "mapearlo" con un teclado, así tenemos que el analógico izquierdo para este ejemplo está configurado como WASD (arriba = W, izquierda = A, abajo = S, derecha = D), y el derecho como las flechas del teclado.

A su vez, he mapeado el DPAD como ZCXV (mas adelante explicaré el sitema que he utilizado para mapear estos controles, y por que he decidido utilizar estos valores)

También se pueden mapear los controles para que se comporten como un ratón, un mousestick, botones de ratón, etc.

Una vez mapeados estos controles, nos vamos windows (con la conexión establecida por Kainy) y abrimos el juego que queremos jugar, y nos metemos en las opciones para "remapear" los controles, utilizando nuestros propios controles (los que hemos asignado a Kainy)

La mecánica de este método es bastante simple, y es directa ya que mapeamos en kainy y remapeamos directamente en el juego, sin necesidad de utilizar mas programas de por medio.

El problema que presenta esto es que en Windows no existe una normalización estricta en cuanto al uso del teclado para juegos, y por tanto no podemos generar un esquema universal, siendo casi obligatorio remapear todos los juegos que vamos a utilizar (si es que permiten remapear en sus opciones)

El segundo problema es que este método no permite un uso analógico de los sticks de la consola, puesto que transforma la información analógica en 4 posiciones digitales (teclas WASD por ejemplo). La única alternativa que nos queda es utilizar algún stick como ratón para poder jugar.

Esta alternativa es factible, y puede dar buenos resultados, pero sigue siendo una alternativa no standard y que no funcionará bien en muchos casos.

Batman Arkham City, corriendo con Kainy, y utilizando controles de ratón para algunas acciones.

En este vídeo estoy utilizando un mapeado de teclas y de ratón en el juego Batman Arkham City, obteniendo un resultado "aceptable" para poder jugar.

Nótese que he mapeado el propio mapeador de la consola JXD a los controles en pantalla, para poder asignar los botones del ratón (en este caso estoy utilizando un programa extra para realizar el mapeo en Android), y aún así se obtiene el resultado esperado, con la salvedad de que tengo elementos visuales en pantalla que podrían molestarme a la hora de jugar.

Sobre estos elementos (botones en pantalla), Kainy no tiene control de transparencia, y solo permite mostrar el contorno de los botones, mostrar contornos de los controles, o ambos

Normal

Contornos

Lo que si podemos hacer es mover estos controles por pantalla, para poder ajustarlos mejor a nuestras preferencias. Para esto, una vez conectados vamos al menú de la aplicación (botón [BACK]), seleccionamos "Páginas"



a continuación el botón "Editar página"


Luego el resto es bastante sencillo. Seleccionamos cada botón que queremos cambiar, y lo movemos con el dedo a la nueva posición, o pellizcando podemos cambiar su tamaño.


Así tenemos una pantalla mas "limpia", con los elementos visuales en los bordes de la misma

También podemos marcar la opción de solo contorno, para que tengamos menos elementos visuales ajenos al juego


Por último, si queremos agregar botones con iconos específicos, como un icono de un ojo, para indicar "modo detective" en el juego de Batman, podemos agregar este icono y a continuación configurarlo.

Abrimos el editor de la página y a continuación agregamos un botón con el icono que buscamos (en este caso, un ojo)




En la página de edición, seleccionamos el ojo y luego propiedades. En la lista de opciones que nos aparecen seleccionamos "Cambiar mapeo"


En esta pantalla vamos a definir que tecla que remos que se presione cuando presionamos este icono.


Para el caso de Batman, usaremos la tecla que tiene por defecto el juego, que es la "X", por lo que la seleccionamos


Y con esto ya tenemos configurado un nuevo botón en la interfaz, y le hemos especificado como debe comportarse.



Los pasos anteriores son para explicar a grosso modo como funciona el configurador/mapeador de Kainy, y como podemos generar una interfaz que nos permita interactuar con el juego, de la manera que nosotros queramos.


Resumiendo, ¿cual es la mejor opción?



Después de ver las características y ventajas de cada alternativa, creo que la mejor opción de ambas alternativas (Splashtop o Kainy) es utilizar Kainy, y a continuación resumiré las razones.

Tomando como base un ordenador "normal", sin una gráfica muy avanzada para jugar, y que quiero utilizar una consola android para utilizar sus controles en la interacción con el juego en Windows:


  • Splashtop no permite ejecutar aplicaciones en pantalla completa.
  • Kainy si tiene soporte para pantallas completas y algunas opciones extra como seguir el foco de una ventana (cuando no está en pantalla completa), presentando en pantalla completa en la consola dicha ventana.



  • Splashtop no permite un remapeo directo de controles físicos, y por lo menos la versión THD requiere que pongamos en pantalla los controles para poder mapearlos.
  • Kainy si permite un remapeo directo de controles (para joysticks standard), por lo que es posible remapear el comportamiento de los controles, sin poner elementos visuales en pantalla.



  • Splashtop solo permite un cliente conectado a un servidor (o por lo menos, no he podido conectar mas de uno).
  • Kainy permite conectar varios clientes a un mismo servidor



  • Splashtop no tiene muchas opciones para la conexión, siendo la mayor parte automática.
  • Kainy permite un nivel de configuración que permite cambiar entre otras cosas la calidad de imagen/audio, para ganar en performance (o calidad) en el streaming



  • Splashtop permite conectar fácilmente desde internet a un servidor windows.
  • Kainy permite conectar desde internet a un servidor en windows, pero requiere configuración manual.



  • Splashtop realiza streaming de lo que sucede en pantalla exclusivamente.
  • Kainy permite realizar streaming de zonas de pantalla, zonas de ventana, o incluso, de ventanas que no están visibles en el escritorio de windows (ventanas minimizadas, por ejemplo)



  • Splashtop tiene una calidad de imagen que parece mejor que Kainy
  • Kainy ha mejorado bastante en sus ultimas actualizaciones, y a día de hoy creo que tienen una calidad bastante similar.



  • Tanto Kainy como Splashtop cuentan con un servidor Linux para streaming (en estado beta)



  • Kainy se puede utilizar como "joystick" (sin streaming)



  • Kainy tiene cliente en PC (Windows) y Chrome (addon)


Con lo anterior no descarto a Splashtop como alternativa, sobre todo si dispones de una tarjeta gráfica que saque provecho de todas sus características, pero para una versión de streaming "low-cost" y funcional, creo que Kainy ofrece las características y experiencia suficientes y que es mas fácil de que cualquier persona pueda acceder a ellas.


Joystick


Otro "problema" que me ha surgido es la ausencia de un joystick real en windows que me simplifique el proceso de interacción con los juegos, aunque la mayoría de ellos tienen alguna forma de reconfigurar los controles, remapeando el teclado, el trabajo de configurar cada juego resulta molesto ya que implica reconfigurar cada título que queramos ejecutar (sobre todo los nuevos títulos), y en muchos casos no tienen soporte las mismas teclas para jugar, por ejemplo, en un juego podría reconocer la tecla Control-Izquierda y Control-Derecha como teclas distintas, pero en otros juegos simplemente reconoce "Control" como tecla, y no hace distinciones. En estos casos, sería necesario reconfigurar tanto el dispositivo Android, como el propio juego para realizar un mapeo correcto y funcional desde la consola Android.


¿Que ventaja tiene un Joystick sobre el teclado?

La principal ventaja es la normalización de los controles. Si jugamos Batman Arkham City, tendremos que podemos configurar multitud de controles, para muchas opciones, todo esto soportado por el teclado y el ratón. Hasta aquí todo bien, pero ¿que pasa si luego quiero jugar Blades of Time?, que muy posiblemente muchos de los controles de Batman no me servirán para jugar BoT, y tendré que reconfigurar: o la consola android para que envíe otros códigos, o el juego para remapear los controles.

Cualquiera de los 2 procesos resulta tedioso, sobre todo cuando tenemos muchas opciones disponibles.

Pero ¿que pasa con un Joystick?, simplemente, que los controles ya vienen preconfigurados y todos tienen una base mas o menos standard. Actualmente, se considera como joystick "standard" un dispositivo con los siguientes elementos:

Nota: La imagen es solo para ilistrar un gamepad. En el caso de uno tipo Sixaxis o X360, los controles que lo conforman son mas o menos los mismos.
Nota 2: Para la nomenclatura de los botones, utilizaré el de X360
Nota 3: Para la nomenclatura de los gatillos, utilizaré la de PSX


  • Stick analógico izquierdo
  • Stick analógico derecho
  • D-Pad
  • 4 botones de acción principal: XYAB
  • 4 gatillos: L1, L2, R1, R2
  • Select
  • Start
  • 2 botones de los analógicos: TL, TR


Con esta "normalización" física, los juegos que tienen soporte para mandos ya vienen preconfigurados para utilizarlos. Así por ejemplo, para jugar Batman Arkham City, tenemos que el mando ya tiene preconfiguradas acciones, algunas de ellas contextuales, y no tenemos que hacer nada extra para poder jugar.

Otros juegos como Blades of Time, utilizan el mismo mando, pero con otra preconfiguración en las acciones.

Así, sin tener necesidad de cambiar nada en el mando, es posible utilizarlo en 2 juegos distintos, por lo que la mayor ventaja de esta "normalización" es que la mayoría de juegos no requieren configurar nada especial para poder jugarlos.

Con lo anterior en mente, he creído conveniente "normalizar" la interfaz de cualquier dispositivo para que se ajuste a este tipo de uso, y con esto ganar en una mayor adaptabilidad de la consola que estemos utilizando, para poder jugar la mayoría de estos juegos.

Tomando en consideración que en el mejor de los casos podría ser factible utilizar 2 consolas en un juego, he generado los siguientes mapeos para 2 jugadores.

Nota: He agregado 4 botones extra, por si los queremos utilizar en algún momento.

Player 1


  • Stick analógico izquierdo: WASD
  • Stick analógico derecho: Flechas (Arriba, Abajo, Izquierda, Derecha)
  • D-Pad Arriba: Z
  • D-Pad Abajo: X
  • D-Pad Izquierda: C
  • D-Pad Derecha: V
  • Botón X = 1
  • Botón Y = 2
  • Botón A = 3
  • Botón B = 4
  • L1 = 5
  • R1 = 6
  • L2 = 7
  • R2 = 8
  • Select = 9
  • Start = 0
  • TL (L3) = Q
  • TR (R3)= E
  • Special 1 = Insert
  • Special 2 = End
  • Special 3 = RePag
  • Special 4 = AvPag
  • Slider -: Shift (mayúsculas) Izquierdo
  • Slider +: Control Izquierdo

Player 2


  • Stick analógico izquierdo: TFGH
  • Stick analógico derecho: IJKL
  • D-Pad Arriba: B
  • D-Pad Abajo: N
  • D-Pad Izquierda: M
  • D-Pad Derecha: Comma[,]
  • Botón X = O
  • Botón Y = R
  • Botón A = U
  • Botón B = Y
  • L1 = F1
  • R1 = F2
  • L2 = F3
  • R2 = F4
  • Select = F5
  • Start = F6
  • TL (L3) = F7
  • TR (R3) = F8
  • Special 1 = F9
  • Special 2 = F10
  • Special 3 = F11
  • Special 4 = Suprimir
  • Slider -: Shift (mayúsculas) Derecho
  • Slider +: Backslash [\]

Si estamos utilizando Kainy, nos conectamos a nuestro pc y una vez conectados vamos a ajustes y configuramos las entradas como se indica anteriormente, exceptuando los botones Special, que los mapearemos en pantalla.

Nos vamos a la configuración de Kainy y realizamos el siguiente mapeo.



Guardaremos este mapeo como "Player 1" para identificarlo fácilemnte.

Hacemos lo mismo, ahora con el segundo mapeo.



Guardaremos el perfil como "Player 2". Con esto nos será muy fácil cambiarnos entre perfiles, si es que tenemos necesidad.

El mapeo anterior es standard, y servirá tanto en una consola android con todos los botones (como una GPD-G5A), o una que tenga menos botones (como una IBEN-L1). Los botones que nos falten los agregaremos a pantalla y los mapearemos para que tengan el mismo comportamiento.

El mapeo anterior es para controles físicos de un joystick standard. Aquellos dispositivos que no tengan un joystick, o que Kainy no reconozca los controles físicos, tendremos que recurrir a poner en pantalla los controles que nos falten.

De esta manera, tendremos que distintos dispositivos pueden tener distintos layouts de pantalla.


Nota de por que he utilizado estos mapeos específicos.


Kainy permite mapear sticks en forma de grupo de teclas, pero no permite mapear las teclas que uno decida.

Para mapeos de sticks, se pueden hacer "WASD", "TFGH", "IJKL", Flechas" y otras combinaciones que repiten teclas con las que he puesto.

Si analizamos un mando standard, tenemos 3 "sticks" que mapear (2 analógicos y uno digital).

Como Kainy permite mapear el DPAD de forma separada, nos quedan 2 sticks por mando que debemos asignar.

como existen 4 grupos de teclas asignables, he distribuído los mapeos asignando "WASD" y Flechas para el Player 1, y "TFGH" y "IJKL" para el player 2 (para stick izquierdo y derecho, respectivamente)

Por eso es esta distribución tan "particular" a la hora de mapear teclas. El resto de botones, simplemente he aprovechado los que quedaban libres para asignar de una manera que me resultara cómoda de memorizar.


Botones en pantalla (Layouts)


¿Para que queremos botones en pantalla?, simplemente por que dependiendo de nuestro dispositivo puede que tengamos mas o menos controles y botones disponibles, y en función de esta disponibilidad agregaremos los controles que nos sean necesarios para completar el mapeo de la configuración básica standard de un mando para juegos.

Voy a poner algunos ejemplos de consolas android conocidas, para que vemamos cada caso y sus particularidades a la hora de crear un layout de controles en pantalla.

JXDS7800B Layout




Cuenta con los siguientes controles:

  • Stick analógico izquierdo
  • Stick analógico derecho
  • D-Pad
  • Botones XYAB
  • Gatillos L1, L2, R1, R2
  • Select, Start

Para completar el esquema que he propuesto, nos faltarían:

  • L3
  • R3
  • Special 1
  • Special 2
  • Special 3
  • Special 4
  • Slider -
  • Slider +


Por lo que los pondremos en pantalla, y podríamos obtener un resultado como esto:


Nota: He puesto un icono del Nº 1, para identificar visualmente que perfil estoy utilizando (Player 1, Player 2)

En este diseño he puesto L3 (que es el icono con el "1") y R3 en las esquinas, "Slider -" y "Slider +" como iconos con una flecha curva hacia la izquierda y hacia la derecha, y los botones especiales del 1 al 4 en los bordes de la pantalla.

Podría poner mas botones, ya que VJoy soporta hasta 32 botones por mando, pero quedaría sin teclas para poder configurar 2 mandos al mismo tiempo, además de que no le veo mucho sentido a tener estos botones en pantalla. Con 4 extra ya podemos hacer cosas interesantes, como atajos de teclado para algunas acciones (capturas de pantalla, activación de sonido, etc). todo esto es configurable dentro del juego, y evidentemente, si es que da las opciones para hacerlo (por ejemplo, un atajo de teclado directo para algún gadget a usar en Batman Arkham City, cosa que no podríamos hacer utilizando un mando simplemente)


IBEN-L1 Layout



Es un dispositivo similar al anterior, pero esta vez tenemos solamente L1 y R1 en la consola, siendo necesario agregar los botones faltantes a la pantalla, con lo que nos quedaría algo así:


y con esto tenemos la misma cantidad de botones que la JXDS7800B, o cualquiera que tenga mas botones.


GPD-G5A Layout


Esta consola tiene botones en sus analógicos, con lo que su layout quedaría mas o menos así:


He puesto los sliders en las esquinas superiores, ya que la consola cuenta con L1, L2, L3, R1, R2, R3.


GPD-G7 Layout


Como esta consola posee 2 botones extra (C, Z) podemos tener un layout así:


Incluso, si en el propio Kainy mapeamos los botones de volumen [VOL-] y [VOL+], podríamos ahorrarnos 2 controles mas en pantalla, y quedarnos así:


Y hasta podríamos prescindir de estos botones en pantalla, si realmente no vamos a utilizar los botones extra (Specials) que hemos definido. (que en absoluto es necesario mapearlos)


Much i5 Layout



Por último, y como ejemplo especial, nos quedan los dispositivos que no poseen un driver de joystick standard como puede ser la Much i5. En estos casos pondremos todos los elementos que Kainy no sea capaz de reconocer como control standard, y lo pondremos en pantalla para hacer coincidir nuestro mapeo genérico.

En el caso específico de Much i5, los botones son reconocidos correctamente por el dispositivo, así que vamos a poner los siguientes elementos en pantalla:

  • Stick analógico izquierdo: WASD
  • Stick analógico derecho: Flechas (Arriba, Abajo, Izquierda, Derecha)
  • D-Pad Arriba: Z
  • D-Pad Abajo: X
  • D-Pad Izquierda: C
  • D-Pad Derecha: V
  • L2 = 7
  • R2 = 8
  • Select = 9 *
  • Start = 0 *
  • TL (L3) = Q
  • TR (R3)= E
  • Special 1 = Insert
  • Special 2 = End
  • Special 3 = RePag
  • Special 4 = AvPag
  • Slider -: Shift (mayúsculas) Izquierdo
  • Slider +: Control Izquierdo

* si utilizamos la opción de la consola que permite utilizar [BACK]=[SELECT] y [MENU]=[START], nos podemos ahorrar estos controles en pantalla.

El layout final sería algo como esto:



Luego, haciendo uso del propio mapeador de la consola, vamos a mapear los elementos que necesitamos que interactúen correctamente (al no tener un comportamiento como joystick). En este caso, pondremos los sticks analógicos que cubran el área de los que hemos definido en Kainy (ojo, el stick derecho debe ser un stick analógico, no un punto de mira), y el DPAD lo pondremos como "Split", y mapearemos cada dirección sobre el DPAD que hemos puesto en Kainy (y que hemos definido con XZCV)

Cargamos el propio mapeador de la consola

Mapeamos solamente los sticks y el dpad, procurando que el área de los sticks quede totalmente cubierta , y sin tocar el resto de botones.


Nota: Evidentemente, los mapeos pueden hacerse de otra manera, por ejemplo, el DPAD podría no mapearse en pantalla, y que simplemente tome los valores naturales del DPAD. Yo propongo este mapeo sugerido en pantalla, por que así normalizo todas las interfaces, además de que para mis pruebas me resulta mucho mas cómodo tener todos los mapeos con comportamientos similares.

Una vez realizado este mapeo, cuando movamos los sticks, dpad o presionemos botones, se comportarán enviando las teclas correspondientes al servidor de Kainy en Windows.


Tablet genérica (7")



Y para finalizar, un layout completo para un dispositivo sin controles, que como es de suponer, implica poner en pantalla todos los controles que necesitamos para interactuar con Windows, cubriendo todos los controles y botones de un mando standard.


Como los botones L1, L2, R1 y R2 tienen muchas posibilidades de que sean botones que mantengamos presionado mientras jugamos (agacharse, acelerar, etc, acciones que necesitamos se ejecuten por un tiempo y que no es simplemente presionar un instante el botón), he agregado 4 botones extra que son del tipo activar, esto es, con una vez que los presionemos se quedan activados (presionados), y con una segunda vez se desactivan.



y finalmente, como layout alternativo, he creado uno que tiene una serie de botones que nos sirven para presionar varios botones al mismo tiempo.


Evidentemente, cada layout es cuestion de personalizarlos como mejor nos parezca. Estos son algunos ejemplos propuestos para implementar como interfaz a la hora de jugar por streaming.

¿Y para otros casos?


Los ejemplos anteriores son casos bastante genéricos que creo que se pueden acomodar a muchas situaciones y dispositivos. En caso de tener alguno que no cuadre específicamente con estos ejemplos, es cuestión de un poco de ingenio para poder realizar un mapeo funcional con el dispositivo.

Algunos ejemplos:

  • JXDS7300B podría plantearse como el mapeo de la JXDS7800B
  • JXD5110B podría plantearse como una JXDS7800B, si mapeamos los botones de [VOL-] y [VOL+] como [L2] y [R2].
  • YINLIPS YDPG16 podría plantearse como una IBEN, agregando un control de stick derecho para suplir la ausencia del control físico.
  • Una tablet sin controles físicos podría plantearse como una MUCH i5, agregando los botones XYAB y los gatillos L1 y R1 (Agregando todos los controles que hemos definido para un mando standard)
  • Un Android Stick TV, con un mando standard conectado (como sea, por bluetooth, usb) mientras se comporte como un mando standard, podrás utilizar un mapeo similar al de JXDS7800B, y los botones que te falten, asignarlos a un teclado por ejemplo (si no tienes suficientes botones para mapear)
  • Una tablet o teléfono. Como es evidente, para estos casos utilizaremos un layout como el propuesto para tablets de 7", ajustando los tamaños y posiciones de los controles para que nos resulten cómodos de utilizar, e incluso eliminando algunos controles que no necesitaremos (como los Special)
  • OUYA, es similar a un Android Stick, con la salvedad de que el mando no tiene suficientes botones (faltan Select y Start), y en su lugar hay un touchpad. Para este caso, utilizar un mapeo similar a GPD-G5A, agregando los botones Select y Start en pantalla. Para poder pulsarlos, utilizar el touchpad para mover el ratón por pantalla y posicionarlo sobr el botón desado (y con un toque, activar dicho botón)

Batman Arkham City ejecutando en OUYA


La disposición de los controles es "a gusto de cada uno". Si alguien considera que L3 y R3 quedan mejor al a los bordes de la pantalla hacia el centro, está bien, asimismo como que alguien prefiera tener los sticks virtuales arriba y losbotones en la parte inferior.

También puede caber la posibilidad de utilizar la inclinación del dispositivo para controlar algún stick/dpad (desde el propio kainy hay una opción para habilitar este tipo de control), pero esto ya es una cuestión de uso, y que cada uno vea lo que le resulta mas cómodo.

Si al completar tu layout encuentras que tienes muchos controles en pantalla, puedes utilizar lo que he comentado anteriormente, y que es mostrar solo los contornos de los controles, para que no existan tantos elementos visuales que impidan ver la imagen del juego (Streaming)




Muy bien, hasta ahora solo hemos generado un perfil "normalizado" de botones y controles de nuestro dispositivo, pero ¿como ponerlo en práctica?

Por un lado, podemos utlizar directamente este perfil para mapear en juegos. Por ejemplo, en el siguiente gameplay he entrado en las opciones del juego, y he reasignado las teclas, utilizando las que envía la propia consola.

JXDS7300B jugando SkyDrift, utilizando el teclado que estamos enviando desde los controles.

Como se ve, se puede jugar con esta configuración, pero como he dicho anteriormente, el problema que tiene esta solución es que tenemos que configurar cada juego en sus opciones por el mapeo de teclas (si es que permite mapearla), para asignar las que tenemos configuradas en nuestro dispositivo.

Aquí es donde utilizaremos el primer programa que nos ayudará a tener un control sobre los juegos en nuestro PC, sin que tengamos que estar configurando cada título en sus opciones para mapear con nuestros controles (teclas)

VJoy



Este programa es un joystick virtual que tiene como función el "transformar" una configuración de teclado en un joystick standard de windows. En efecto, cuando instalamos este programa, se instalará un driver de joystick en windows que podremos verificar como si fuese cualquier otro joystick normal.

Además, no se instala uno sino 2 joysticks por defecto, con lo que el mapeo anterior que he sugerido empieza a tener sentido (Player 1 y Player 2).

Este programa es gratuíto y lo podemos descargar desde la web del desarrollador Headsoft, o directamente desde este enlace

Una vez instalado, al ejecutarlo se agregará un icono en la barra de tareas. Al hacer doble click nos mostrará la interfaz del programa.

En esta interfaz podemos ver que existen varios controles para configurar.

Pantalla por defecto de VJoy (mapeo por defecto)

Para realizar la configuración correcta de nuestro dispositivo android, podemos mapear cada control con la información que he sugerido como mapeo (buscando en cada combo la opción que le corresponde), o conectamos android por medio de Kainy y una vez conectado vamos dando a cada botón con "..." de la ventana, y presionamos el control correspondiente en nuestra consola.

Para ser prácticos, la configuración de VJoy debería qquedar así

Player 1


Abrimos la configuración correspondiente en nuestro dispositivo (por ejemplo, utilizaré la consola Much i5) y en el programa presionaremos en el control "Left" los puntos "...". Se mostrará una ventana que nos indica que está a la espera que presionemos una tecla para asignar




Movemos el stick izquierdo de la consola hacia la izquierda, con lo que aparecerá en pantalla la asignación "A"

Realizar lo mismo con el resto de controles.
Nota: el POV es el DPAD.

Los botones los he asignado de la siguiente manera (aunque ya lo he comentado anteriormente)



  • Left, Right, Up, Down = Stick Izquierdo  = ADWS
  • Z Axis -, Z Axis +, Z Rotación -, Z Rotación + = Stick Derecho = Left, Right, Up, Down
  • Slider -, Slider + = Control deslizante/Rotatorio (botones en pantalla) = Mayúsculas Izquierda, Control Izquierdo
  • POV Left, POV Right, POV Up, POV Down = DPAD = CVZX
  • Button 1 = X = 1
  • Button 2 = Y = 2wr
  • Button 3 = A = 3
  • Button 4 = B = 4
  • Button 5 = L1 = 5
  • Button 6 = R1 = 6
  • Button 7 = L2 = 7
  • Button 8 = R2 = 8
  • Button 9 = Select = 9
  • Button 10 = Start = 0
  • Button 11 = L3 = Q
  • Button 12 = R3 = E
  • Button 13 = Special 1 (en pantalla) = Insert *
  • Button 14 = Special 2 (en pantalla) = End *
  • Button 15 = Special 3 (en pantalla) = PgDn *
  • Button 16 = Special 4 (en pantalla) = PgUp *


Estos botones se podrían mapear a botones físicos, si la consola dispone de mas botones físicos "configurables", por ejemplo, las teclas de volumen.


En este punto sugiero realizar el mapeado desde la propia consola, con lo que verificaremos que están enviando los códigos correctos y que tenemos todo configurado correctamente.


Una vez configurados todos los botones, procedemos a cambiar la configuración en Kainy para el Player 2 (No es necesario realizar este procedimiento si no vamos a utilizar nunca el segundo player, pero ya que estamos en esto, lo dejamos todo configurado y no tendremos que toquetear nada mas en un futuro)

Player 2



  • Left, Right, Up, Down = Stick Izquierdo  = FFHTG
  • Z Axis -, Z Axis +, Z Rotación -, Z Rotación + Stick Derecho = JLIK
  • Slider -, Slider + Control deslizante/Rotatorio (botones en pantalla) = Mayúsculas Derecha, Backslash [\]
  • POV Left, POV Right, POV Up, POV Down = DPAD = M[,]BN
  • Button 1 = X = O
  • Button 2 = Y =R
  • Button 3 = A =U
  • Button 4 = B = Y
  • Button 5 = L1 = F1
  • Button 6 = R1 = F2
  • Button 7 = L2 = F3
  • Button 8 = R2 = F4
  • Button 9 = Select = F5
  • Button 10 Start = F6
  • Button 11 L3 = F7
  • Button 12 = R3 = F8
  • Button 13 Special 1 (en pantalla) = F9 *
  • Button 14 Special 2 (en pantalla) = F10 *
  • Button 15 Special 3 (en pantalla) = F11 *
  • Button 16 Special 4 (en pantalla) = Delete (Suprimir) *


Guardamos el perfil. Podemos dar un nombre que queramos (por ejemplo, Kainy_P1&P2.ini), pero sugiero guardarlo además como VJoy.ini, para que el programa lo cargue por defecto al arrancar.

Una vez configurados los controles, podemos ir a las propiedades de joystick en Windows, y verificar que cada control responde correctamente.


En el vídeo (mis disculpas por la calidad de imagen, pero es que no tengo una cámara de mejor calidad para capturar vídeos) se puede ver que el joystick responde correctamente con los controles de la consola (estoy utilizando una JXDS7800B). Probamos cada configuración, primero Player 1, y luego Player 2.

Nota: Como se puede deducir, y que ya he indicado anteriormente, este sistema al estar basado en pulsaciones de teclado enviados desde Android, y transformados en un joystick para windows, por tanto la información es digital, por lo que los sticks analógicos solo responderán con valores máximos (digitales)

Aquí sugiero configurar y ajustar completamente los 2 perfiles, para Player 1 y Player 2. Una vez configurados, posiblemente ya no tengamos necesidad de toquetear mas esta aplicación, sino que simplemente ejecutarla para obtener la emulación de ambos mandos.

JXDS7800B ejecutando Shank en modo joystick (sin botones extra en pantalla)


Llegados a este punto, deberíamos tener:


  • Kainy conectado, con los perfiles de teclas configurados y con el diseño de pantalla con los controles que nos falten para completar un mando standard (con 4 botones extra, si los hemos configurado. Los que he llamado "Special")
  • 2 Perfiles de joystick configurados en windows (VJoy), que reaccionan con los controles de nuestra consola.


Ya solo con lo anterior hemos ganado en una gran compatibilidad en muchos juegos que tienen soporte para mandos, y que los podremos jugar de manera bastante natural desde la propia consola Android, sin necesidad de remapear nada en ninguna parte.

Aún así, no tenemos un soporte 100% para los juegos que tienen soporte de mandos, y que los comentaré en la siguiente sección.

Juegos con soporte para mandos XInput (Mando de X360)


Aquí topamos con otro de los problemas frecuentes, y es que existen muchos juegos que tienen soporte para un tipo especial de mandos y que no funcionan con un joystick standard.

Para estos casos, afortunadamente tenemos otro programa que nos vendrá muy bien, y es un emulador de mandos de X360. Este emulador toma como entrada un mando standard en windows, y lo "transforma" para que los juegos lo entiendan como un mando de X360.

Como en el anterior paso ya hemos logrado configurar un mando standard que reacciona con nuestra consola, lo único que nos queda es ejecutar este programa para "transformar" nuestro mando y que los programas crean que tenemos uno de X360 conectado al PC

En esta ocasión tendremos que mapear correctamente el emulador para que correspondan los botones con nuestro mando de VJoy. Este proceso es bastante sencillo de realizar. Simplemente vamos por cada opción de la aplicación y mapeamos directamente el valor con el mando. Como posiblemente no nos sepamos los valores que correspondan, vamos a seleccionar "Record" para que el programa se quede a la "escucha" hasta que presionemos un botón que será mapeado al control correspondiente.

Emulación de un mando de X360

Una vez mapeados todos los controles, tendremos un mando de X360 emulado que podremos utilizar en juegos como Batman Arkham city (que requiere mando de X360) sin mayores complicaciones.

Nota. Hay que copiar los ficheros del emulador (dll y fichero de configuración principalemente) en el directorio de los ejecutables de cada juego que queramos ejecutar. Cuando se lance el juego, oiremos un "beep" que nos indicará que la emulación ha comenzado. Si no se oye el "beep", entonces no tenemos emulación y tendremos que verificar si lo hemos copiado en el directorio correspondiente.

Pueden existir juegos que no se ejecuten correctamente con la emulación de este mando.

Jugando Batman Arkham City, sin cortes ni mayores problemas visuales (mas allá de los propios que tiene mi máquina para ejecutar el título), y utilizando una emulación de mando de X360 (Este juego no tiene soporte para mandos standard)

Como el mando de X360 es reconocido tanto en juegos que tienen soporte de este tipo de mandos, como en los que tienen soporte de joystick standard, sugiero que cada vez que vayamos a ejecutar Kainy para jugar por streaming, cargar los dos programas de emulación a la vez: VJoy (para transformar de Kainy/Teclado a Joystick Standard) y X360ce (transformar de Joystick Standard a Mando X360)


Algunos tweaks


No soy un experto en temas de tweaking, pero me permito sugerir un par de ajustes en android y windows que posiblemente logren mejorar la experiencia de uso cuando estamos haciendo Streaming de juegos.

El primero de todos es intentar utilizar la menos cantidad de programas o "capas" para ejecutar el streaming.

Android


Según las pruebas que he estado haciendo, opciones como DroidMote lo único que hacen es complicar el proceso, sin que nos ofrezca una solución que mejore las prestaciones de Kainy (me centraré en este programa), ya que Droidmote solo envía la información del joystick de la consola android, pero en datos digitales, sin que exista información de los sticks analógicos, y con esto en mente, es mejor prescindir de esta alternativa "extra" en nuestro dispositivo, haciendo uso de las propias opciones que nos ofrezca la consola (mapeo de teclas)

En algún momento me he basado en los propios mapeadores de las consolas, pero por una razón muy simple: ya están cargados en memoria. En el caso de la Much i5, no encuentro mucho sentido en cargar otra aplicación extra para poder enviar la información de los controles, por lo que he preferido utilizar controles en pantalla y mapearlos con el propio mapeador de la consola, y con esto evitar cargar un mapeador extra.

Cierto es que pueden existir opciones que nos permitan mapear directamente los controles para que envíen teclas, por una cuestión de "standarización" de interfaces, he preferido hacer todo con las mínimas herramientas posibles.

En android, es recomendable evitar cualquier programa que nos pueda generar problemas de relentización, y que se puedan traducir en lag en los controles.


Resolución de pantalla

Para dispositivos con pantallas con mucha resolución, es interesante y útil buscar alguna herramienta que nos permita cambiar la resolución del dispositivo. Esta resolución incide directamente en la calidad del streaming, ya que la parte del servidor en windows, enviará una señal de vídeo basada en la resolución del cliente (nuestro dispositivo android), y por tanto a mayor resolución, mayor ancho de banda y muy posiblemente, menor frames por segundo, y con esto una experiencia de juego que no es fluída.

En mis pruebas, he utilizado algunas veces el programa Resolution Changer Pro (de pago), con el cual he podido cambiar resoluciones en android "al vuelo", y con esto ajustar la calidad y fluidez del streaming realizado desde el servidor.

Para ejemplos, he capturado los siguientes vídeos:

Insane 2 en NVidia Shield, con la resolución original de la consola (1280x720 pixels)

Y ahora con una resolución de 800x600

Como se puede ver en estos vídeos, en el primer ejemplo la calidad de imagen es mejor, siendo mas nítida en general, pero la fluidez del streaming se ve afectado de forma notable, sufriendo varios microcortes en la ejecución, además de que el control el juego se torna con mucho lag.

En el segundo ejemplo, es el mismo juego en la misma consola, pero con su pantalla reducida a 800x600, y se puede apreciar como se gana en rendimiento a la vez que el control responde mucho mejor.


Opciones de Kainy

Dentro de las opciones generales que nos ofrece Kainy, encontramos un par que afectan directamente a la calidad y fluidez del streaming (Página del Sistema).



Las opciones que nos interesarán son las siguientes:

Calidad Imagen: Como su nombre indica, esta opción sirve para establecer la calidad que ejecutará el streaming, y como podemos imaginar, a mayor calidad, menor fluidez, por lo que hay que buscar el valor que nos ofrezca la mejor alternativa. Personalmente, creo que la calidad mas baja de imagen sigue siendo buena en dispositivos con pantallas de 5" y hasta de 7", ya que al comprimir la imagen original, el resultado no es notorio que tenga baja calidad.

Como regla general, más calidad implica mas datos para enviar/recibir, y por tanto mas ancho de banda en la conexión. Si vemos que nuestra conexión es suficientemente buena, podemos ir cambiando las calidades para obtener mejores resultados, pero siempre hay que empezar de las calidades mas bajas.

Calidad Sonido: Como pasa con la calidad de imagen, mientras mejor sonido, menos fluidez. En este caso, directamente sugiero utilizar la calidad mas baja.

Activa Foco: Cuando está activa esta opción, el servidor del streaming envía el contenido de la ventana que tiene el foco actualmente. Esta opción es muy útil para disfrutar de un juego en nuestra consola, sin que esté a pantalla completa en Windows.

Streaming de pantalla completa

Streaming de la ventana con el foco activo

Modo ventana: Funciona directamente en conjunto con "Activa foco". Cuando Modo Ventana está desactivada, sólo extrae el contenido de la ventana que tiene el foco en windows, sin enviar los bordes ni el título de la misma por streaming. Esta opción es muy útil para mostrar el contenido "limpio" de los j uegos, sin elementos como los bordes de ventana, botones para cerrar, etc, que presenta windows.

Modo Ventana activado (muestra los bordes y el título de la ventana windows)


Modo ventana desactivado (no muestra los bordes ni el título de la ventana windows)

Intentar utilizar redes cableadas.

Si nuestro dispositivo cuenta con un puerto ethernet, o si podemos contar con un adaptador de red USB, y evidentemente, si tenemos la posibilidad (y comodidad) para hacerlo, utilizar una red por cable de preferencia.

Haciendo pruebas al respecto, he encontrado que una consola conectada por cable de red ofrece un mejor desempeño y sobre todo estabilidad a la hora de conectarse para hacer streaming.

Se que lo que comento no es una novedad, y es bastante obvio, pero si vuestro caso es conectar la consola por ejemplo en una TV, para hacer un "repetidor" del juego que tenemos en nuestro PC, lo dieal sería disponer de una infraestructura que nos permita conectar la consola android (teléfono, tablet, etc) por cable de red hacia el router/PC

En la siguiente prueba, he utilizado un cable de red de unos extendido utilizo unos 8mts, y el resto se encuentra enrollado) en una consola OUYA


Skydrift por streaming en OUYA, conectada por cable de red al router.

Notar que la resolución empleada en esta prueba es de 1280x720, (no he cambiado la resolución), y que el resultado es bastante aceptable para poder jugar.


Windows


En Windows, hay varios tweaks y trucos que podemos utilizar, y que en algunos casos notaremos una mejora en el streaming que estamos realizando.


Evitar WIFI a toda costa.

Al comienzo de este artículo comenté que las versiones iniciales de Kainy tenían problemas de estabilidad en la conexión, causando varios cuelgues/parones o incluso desconectándose del servidor.

Como primera medida para mejorar la calidad y estabilidad de la señal, es conectar nuestro ordenador por red cableada al router.

Como medida adicional, desactivar cualquier antena wifi que disponga el equipo.

Por lo que he podido probar, aún cuando estemos conectados por cable al equipo, si existe una red wifi habilitada, kainy eventualmente presenta algún error en la conexión y por tanto corta el streaming. Por tanto, y para minimizar los problemas de conectividad, intentaremos que Kainy salga solo por una tarjeta de red cableada (ojalá un puerto Gigabit)

Lo cierto es que en las últimas versiones de Kainy, la función por wifi va mejor (es mas estable), todavía sigo observando mas caídas y desconexiones por Wifi que por red cableada, por lo tanto mi recomendación es esa, que se eviten redes inalámbricas para hacer streaming.


Procesos de windows

Este tweak puede ser un poco complicado, por que podría dejarnos la sesión de windows un poco inestable.

Cuando tengamos ejecutando nuestro juego, vamos a abrir el administrador de procesos y vamos a seleccionar los siguientes procesos.

Kainy.exe (32 bits), damos con el botón derecho del ratón, y fijamos su prioridad en "sobre la normal"
Juego que estamos ejecutando (por ejemplo, batman.exe), y fijamos su prioridad en "sobre lo normal"

No tocaremos ni un otro proceso, ni para bajar prioridades ni nada por el estilo.

Con lo anterior, hemos ganado un poco en atención de la CPU para que se ejecuten estos 2 programas. Por un lado, el performance debería mejorar un poco (tampoco para tirar cohetes), y por otro lado, kainy seguirá teniendo la "atención" de la cpu para poder realizar el streaming correspondiente, todo esto con una prioridad mayor que el resto de programas que se encuentran ejecutando en windows.

Es posible, y solo si sabemos que podremos tomar el control de la máquina sin problemas, subir la prioridad a "Alta" para experimentar si es que el streaming va mas fluído, y/o con menos lag, pero nunca poner en "Tiempo real", por que será necesario casi al 100% tener que reiniciar "de mala manera" el ordenador.

Como tenemos para establecer prioridades entre "Arriba de lo normal" y "Alta", podemos jugar con estos valores para, según lo que necesitemos, darle mas prioridad al juego para que se ejecute mas fluído, o por el contrario si damos prioridad a Kainy, para que el gamestreaming sea mas fluído y suave.

Sobre lo mismo, recomiendo descargar cualquier cosa de memoria que pueda comer recursos de la máquina (chrome con muchos addons, mozilla, iexplorer, etc)


Antivirus mas "relajado"

Aunque muchos puede que este tweak no les parezca tal, creo que es uno de los tweaks que mas cpu puede liberarnos para jugar.

Todos los antivirus (o por lo menos, los que conozco) tienen una forma de especificar que tipo de ficheros debe escanear en busca de virus

Buscar en alguna parte de la configuración, las siguientes opciones, y cambiarlas por los valores indicados a continuación:

Escaneo en acceso de TODOS los ficheros: cambiarla por "solo ficheros con extensiones conocidas"
Explicación: No tiene sentido que un antivirus se ponga a escanear un txt, o una imagen, o un fichero de configuración de un juego, una base de datos de un juego, etc, por cada acceso que hacemos. Los virus o ficheros maliciosos solo se ejecutan desde extensiones ejecutables y conocidas, por lo tanto recomiendo cambiar el escaneo de todos los ficheros por solo aquellos de extensiones conocidas.

Nota: esta medida se debe complementar con un escaneo frecuente (semanal) de todo el sistema, de todos los ficheros.

Escaneo de ficheros comprimidos. Esta opción quita mucho rendimiento en los sistemas, puesto que cada vez que accedemos a un fichero comprimido (zip), el sistema lo escanea antes de que podamos leerlo nosotros.

Este tipo de escaneo es preventivo mas que nada, pero teniendo activo el escaneo en acceso del punto anterior, si un zip viene infectado, saltará la alarma (y en general se limpiará) cuando lo desempaquetemos.

Nota: acceder a un fichero comprimido no es tan solo abrirlo para mirar que hay dentro. Windows, cada vez que lista un directorio, también lee los contenidos de un fichero zip para presentarlos en el explorador de ficheros como si fuese una carpeta (carpeta comprimida). por tanto, si tenemos por ejemplo un directorio de roms de mame, que generalmente están en zip, y digamos que son 10000 (por poner un ejemplo), el sistema normalmente se tomará mucho tiempo en poder acceder a este directorio.


Firewall, siempre activo, pero configurado.

En general los sitios que indican pasos para realizar streaming, sugieren apagar el firewall para evitar problemas. En mi caso, yo utilizo Comodo Personal Firewall (basicamente, por que me ofrece mas información y control sobre las conexiones que el firewall que trae windows), y si bien es cierto que la primera vez que realizo el streaming desde un dispositivo me saltan muchas alertas de conexión, y que debo autorizar, luego ya no tengo mayores inconvenientes, y así siempre estoy protegido por un firewall.

Personalmente NO recomiendo qutiar el fierwall para jugar, aunque sea de forma local, mientras el PC tenga acceso a internet.


IP Estática

Este tip no es un tweak específico de performance en principio, pero que a la larga si que nos beneficiará en el desempeño.

Al configurar Kainy en android, informamos de varios valores para poder conectarnos a el. Entre ellos hay un ID de Kainy, una IP local y una IP de internet.

Si informamos a Kainy de su ID, esta información será utilizada por Kainy para conectar con un servidor, si es que la ip proporcionada no corresponde con alguna válida

Supongamos que tenemos un PC con 2 tarjetas de red, una que sale a internet directamente (un modem 3G, por poner un ejemplo) y la otra es para nuestra red interna (con la IP 192.168.1.50, por poner un ejemplo).

Ahora, si tenemos una IP dinámica en el PC (hemos reiniciado el PC y ahora tenemos una IP nueva, por ejemplo, 192.168.1.51), y no la hemos cambiado en el cliente Kainy (android), cuando conectemos a nuestro PC, Kainy irá directamente a la IP 192.168.1.50, que ya no corresponde con nuestro PC. Como esta IP fallará, Kainy intentará resolver la dirección de nuestro PC basado en la ID, y que podría ser resuelta como la la IP que tenemos en la salida de Internet (el modem 3G), y por tanto se establece una conexión de red hacia el PC, pero tomando el modem 3G como tarjeta de red. (evidenemtene, siempre y cuando nuestro dispositivo android también tenga salida internet)

Como se puede ver, el tema de las IPs puede ser un lío, y generar una experiencia de streaming no muy positiva, dependiendo de como se resuelva la conexión, por tanto sugiero poner una IP estática al PC, de modo tal que Kainy siempre resuelva correctamente y de la forma mas directa la conexión hacia el servidor windows.

Por otra parte, no tengo constancia de que sea necesario poner una IP estática en Android, por lo que mi recomendación sólo es para nuestro PC.


Cambio de resolución de Windows

Así como he comentado que la resolución de Android incide directamente en la fludiez del streaming, también la resolución de windows afectará.

Mientras mas grande (mayor resolución) tenga Windows, el servidor de Kainy tendrá que trabajar mas para poder "comprimir" la imagen de windows para transformarla en la imagen de Android.

Además de esto, la profundidad de color también es importante puesto que a más profundidad, mas información, mas ancho de banda y mas procesamiento para enviarla hacia android.

La mayoría de streamings jugables que he realizado, son con la pantalla windows con una resolución parecida (lo mas parecida posible) a la resolución de Android, incluso intentando hacerlas conicidir.

En windows, generalmente utilizo la resolución 1024x768 y 16bits de color. Nótese que algunos juegos no arrancan con esta configuración, por lo que habrá que buscar la óptima para relazliar el streaming.

Por ejemplo, para la JXDS7300B, la resolución nativa es 1024x600, por lo que en windows configuro la pantalla a 1024x768 como resolución. También he probado a bajar a 800x600, y aplicar Resolution Changer Pro en Android para poner la misma resolución de 800x600, y en general los resultados son buenos, aunque claro, hemos perdido mucha rsolución en el camino.

Evidentemente, mientras menor tamaño tenga que trabajar Windows, mas rápido debería poder procesar. Los emuladores por ejemplo, si se ejecutan en ventana podemos jugar con las opciones de "Modo Ventana" y "Activar Foco", y cambiar el tamaño de la ventana de Windows para obtener mejor resultado en el streaming en la consola, todo esto sin necesidad de cambiar la resolución de windows como tal.

En general, y por lo que he notado, es mas rápido hacer un escalado "hacia arriba" que "hacia abajo", o lo que es lo mismo, es mejor tener la resolución de windows con un tamaño menor que la resolución de Android. como en algunos casos es difícil (por que no se puede poner tan pequeña la resolución de windows), las ejecución de juegos en ventana ofrece una alternativa de poder reescalar sin mayores complicaciones.

Ejemplo de configuración de pantalla en windows (ejecución del juego en ventana, con la pantalla a 1024x768), y redimensionamiento de la pantalla de Android a 1024x768

Blades of Time, con tamaños originales en NVidia Shield

Con tamaños cambiados.

Como se puede apreciar, el juego en el primer vídeo es muy poco "jugable", puesto que la imagen no es fluída, y por tanto no se puede ver correctamente lo que sucede en el juego, y mucho menos reaccionar en consecuencia, sin embargo en la segunda imagen se puede ver una mejora notable en la fluidez del streaming, permitiendo jugar el título.

Comentar que aunque se consiguen algunos resultados interesantes con estos ajustes, el cambio de pantalla en Android no es absolutamente necesario, y basta con cambiar la resolución de windows para obtener una mejora en el streaming.


Manos a la obra



Aunque es una versión mas "de andar por casa" que NVidia Shield, tenemos unos requerimientos mínimos que intentaremos cumplir.

También hay que considerar que la emulación basada en la solución de Kainy, tiene bastante uso de CPU, por lo que el desarrollo de algún juego se puede ver afectado en su rendimiento.

¿Que necesitamos?


Para la infraestructura:


  • PC "aceptable", que permita ejecutar los juegos que queremos ejecutar (no es lo mismo el requerimiento para ejecutar Doom, que para ejecutar Batman Arkham City). Considerar que cuando se realiza streaming, hay mas uso de CPU, por lo que si tienes un juego que va muy justo de procesador, al hacer streaming irá relentizado. En mi caso para las pruebas de este artículo utilizo un Samsung NP300V5AH Core i7 (que es de mi mujer en realidad, jejeje)
  • Puerto de red por cable (de preferencia Gigabit). He probado con algún adaptador de red USB, y también funciona sin mayores problemas.
  • Router con buena antena Wifi. En mi caso utilizo el TP-Link TD-W8970 (su precio oscila entre 50 y 55€ en tienda española. es cuestión de buscar)
  • Consola/Dispositivo Android

Software requerido (Estos son los programas que he utilizado. Mas abajo pondré enlaces a los ficheros de configuración que tengo y que he utilizado en las capturas de vídeo):



Ficheros de Deen0X


  • Kainy Titanium Backup (solo datos, es un directorio donde guardaré actualizaciones de las configuraciones de Kainy). En este fichero se encuentran la mayoría de configuraciones de teclado y layouts de pantalla que podamos necesitar.
  • VJoy fichero de configuración. Este fichero funciona en conjunto con la configuracion de Kainy, y permite el mapeado directo de 2 players a los joysticks emulados en Windows
  • X360ce ficheros de configuración. Copiar estos ficheros en cada juego que necesitemos soporte de mando de X360. Esta configuración esta preparada para trabajar con el fichero de configuración de VJoy (los joysticks virtuales)

El fichero de Kainy contiene preconfiguraciones de layouts y teclados, en 3 variantes cada uno:


  • Player 1
  • Player 2
  • Player 1 var: Esta configuración es una altenrativa de uso para el Player 1, dependiendo del dispositivo donde se utiliza.


se incluyen estos layouts Genéricos (no son específicos para los dispositivos, sino que se toma como base la máquina. Usar el que mejor se acomode con el dispositivo que vamos a utilizar):


  • JXDS7800B
  • IBEN-L1
  • Much i5
  • Tablet Genérica (7")
  • OUYA
  • GPD-G5A
  • GPD-G7






También están las configuraciones de los botones para los mapeos de teclas



Ficheros de VJoy


El fichero .rar de configuraciones VJoy, contiene 5 ficheros:


  • VJoy XYAB_L1R1L2R2.ini
  • VJoy XYAB_L2R2L1R1.ini
  • VJoy YXBA_L1R1L2R2.ini
  • VJoy YXBA_L2R2L1R1.ini
  • VJoy.ini (idéntico a VJoy XYAB_L1R1L2R2.ini)


En general, un orden de botones standard es, hablando en nomenclatura de X360, es la que denominaremos XYAB (por que están en ese orden, de izquierda a derecha y de arriba hacia abajo):


Pero algunos dispositivos tienen cambiados estos valores. La principal variante de este orden es este (YXBA):


Tomaremos como normal la XYAB, pero si ves que los botones están intercambiados, prueba a cargar alguna de las variantes YXBA que he puesto en el fichero (YXBA_L1R1L2R2 debería ser la forma "normal")

Ahora, dentro de estas variantes he puesto 2 extra, que son con los gatillos intercambiados.

Si miramos una consola como la JXDS7800B, veremos que el orden de los gatillos es (de externo hacia interno):


  • L1, R1, L2, R2

Hay algunos dispositivos como la consola GPD-G18 que tienen intercambiados estos gatillos, y los presentan como:


  • L2, R2, L1, R1

Los ficheros que he puesto en la configuración tienen estas variantes, de los botones y de los gatillos, para adecuar fácilmente los botones a nuestro dispositivo, sin tener que cambiar nada en las configuraciones. Simplemente vamos a VJoy y le damos a "Load" para cargar alguno de estos ficheros.

El mapeo que normalmente haríamos para enlazar de un control standard a un mando de X360 sería algo como esto:



Como dato, en general utilizo la variante de L2R2L1R1 (los gatillos invertidos) por que me resulta mucho mas cómodo utilizar los gatillos externos como gatillos (LT y RT en nomenclatura X360), y los internos como pulsadores (LB y RB)



Incluso en consolas con solo L1 y R2, utilizo esta configuración cambiada, por que generalmente los gatillos tienen mucho mas uso que los pulsadores. Por ejemplo, en Batman Arkham City, el gatillo derecho del mando de X360 se utiliza mucho para el gancho (para subir a los edificios) y el gatillo izquierdo para activar los gadgets, mientras que el pulsador derecho se utiliza con menos frecuencia al igual que el izquierdo.

En los juegos de coches, generalmente el gatillo derecho se utiliza para acelerar y el izquierdo para frenar, por lo tanto, prefiero utilizar los gatillos L1 y R1 de cualquier consola, como L2 y R2 (los gatillos de un mando X360), y L2 con R2, que están mas complicados de utilizar al estar mas hacia adentro en el diseño de las consolas, los dejo para los pulsadores L1 y R1 (LB y RB)


Ficheros X360ce


Estos ficheros contienen la configuración para el emulador del mando X360ce. Basicamente hay que copiar estos ficheros en cada directorio con los ejecutables de los juegos que necesitan un mando de X360 para unfionar (como el Batman Arkham City, por poner un ejemplo)


Instalando programas


La parte mas complicada de todo el tema de streaming es configurar todo para que funcionen los joysticks, y eso ya lo tenemos con los ficheros anteriores.

Ahora, instalamos Kainy en Android, y NO ABRIRLO todavía. (si lo has abierto, puedes ir a detalles de la aplicación y eliminar el caché y los datos del programa, y forzar a que se detenga)

Descargamos el fichero del backup de Kainy, y lo importamos con Titanium Backup, dando a restaurar los Datos.

Una vez importados, en android solo nos faltará configurar la información del Servidor Kainy para poder conectarnos.

VJoy



Instalamos VJoy. La instalación es muy sencilla y no debería complicarnos. Una vez instalado, copiamos el fichero de configuración que hemos descargado (VJoy.ini) en el directorio donde está VJoy, y lo dejamos con ese nombre para que lo cargue automáticamente al arrancar el programa.




Instalamos Kainy Server en nuestro PC donde ejecutaremos los juegos (que llamaremos PC-Gamer). Una vez instalado, ejecutamos el programa y al abrir la interfaz, nos vamos a "Settings" y luego a "Network"


Para conectarnos sólo nos hará falta la ip Local (que en el ejemplo es 10.0.0.10) y la password de Kainy, pero para una correcta implementación de la interfaz de conexión en Android, pondremos los 4 datos marcados con rojo.

Nota: La IP Local es la IP de nuestro PC (es la ip del adaptador de red que estamos utilizando)



Abrimos Kainy en Android, y nos saldrá una página con varias opciones vacías. Cada una de estas opciones es un slot, y nos permitirá conectarnos a un servidor.


Seleccionamos una y nos dará las opciones de conectar (que todavía no hemos configurado la conexión) y editar el slot. Editamos.


En esta pantalla llenamos los datos que necesitamos. El nombre del servidor es un nombre que le daremos al slot, el resto, son datos que sacaremos de la pantalla de settings de Kainy en el PC


Damos al botón "Atrás" para guardar, y ya nos sale el slot disponible para conectar.



Verificar que en Windows no nos salta el firewall solicitando permisos, de ser así, concederle los necesarios para que Kainy se conecte sin problemas al PC. (Aquí hay una guía para conceder permisos a Kainy con el firewall de windows)


X360ce


Finalmente, copiamos los ficheros que he puesto para X360ce, en la carpeta de binarios de cada juego que necesitemos un mando de X360

Por ejemplo, para Batman Arkham City, el directorio de binarios de mi instalación es:
D:\SteamApps\common\Batman Arkham City GOTY\Binaries\Win32\

Hay que copiarlos donde está el .exe de cada juego.

Si lo hemos hecho bien, cuando lancemos el juego oiremos un "beep" (o algún sonido del sistema) que nos indica que la emulación del mando de X360 ha iniciado.

Prueba general


Abriremos VJoy, habilitaremos la emulación (el check superior izquierdo que pone "Enabled"), nos aseguramos que "Block Keys" y "Auto center" están marcados.

Nota: Cuando "Block Keys" está seleccionado, cuando presionemos teclas que están mapeadas en el programa, windows no las mostrará como teclas, sino que se comportarán como el botón o control del joystick al que han sido asignadas, por lo tanto mientras está activa la emulación, no se podrá escribir con el teclado.

Conectamos Kainy desde Android, Seleccionamos el layout que mas nos acomode para nuestro dispositivo, y seleccionamos el mapeo de teclado que nos resulte cómodo. En este caso, voy a utilizar una consola JXDS7800B y he elegido el mapeo "Player 1", junto con el layout "JXDS7800B Player 1"


En Kainy, damos al botón [BACK], y en el menú que nos aparece le damos a "Ajustes"


Seleccionamos en la "Ranuras de Hardware" la configuración "Player 1" (que he creado para Kainy), y seleccionamos "Atrás"

A continuación vamos a Windows, ejecutamos VJoy y lo activamos (Enabled debe estar marcado)

A continuación abrimos las propiedades de joystick (ejecutar "%windir%\system32\control joy.cpl") y vamos al joystick 1, y en la pantalla de pruebas, movemos los controles de nuestro dispositivo.




Finalmente, vamos al juego que queremos ejecutar, por ejemplo Batman Arkham City, y en el directorio de los binarios (.exe) ejecutamos x360ce.exe, y movemos los mandos y botones de nuestro dispositivo



Cambio de resolución de pantalla


Una vez configurado todo correctamente, vamos a las propiedades de pantalla y cambiamos la resolución de windows por una que sea  lo mas cercana a la configuración de pantalla de nuestro dispositivo Android, y la profundidad de color a 16 bits.

por ejemplo, para la JXDS7800B, que tiene una resolución de 1280x800 pixels. Windows nos permite una resolución de 1280x720, por lo que usaremos esta como resolución base.

Cambiar la resolución de Windows es en el caso de que ejecutemos juegos a pantalla completa. Si vamos a ejecutar juegos en ventana, no es necesario cambiar la resolución de pantalla de windows, pero si es aconsejable bajar la profundidad de color a 16bits

Nota: Si vemos que aún así tenemos un streaming poco fluído, podemos intentar otro "truco". En android instalamos "Resolution Changer Pro" o alguno similar, que nos permita cambiar la resolución de la pantalla en Android. Vamos a bajar la resolución de la pantalla en android para ganar en fluidez en el streaming. Por poner un ejemplo, podemos bajar a 1024x600 o a 800x600. Ya es cuestión de "jugar" con algunos valores mas o menos similares a los de windows, y encontrar alguno que nos vaya bien. Ojo, según que programa utilicemos algunos valores podrían colgar el dispositivo. Hay que asegurarse de que estos valores no son permanentes (que no se apliquen cuando reiniciamos android)


¿Player 2?

En las configuraciones he puesto énfasis en establecer una configuración funcional para el player 2, pero para que nos puede servir esto?

Existen varios usos en realidad. Empezando por el mas simple, que es utilizar una consola como mando en windows (sin el streaming de vídeo)

(En este vídeo utilizo Droidmote como mando, pero es exactamente lo mismo para Kainy)

Pero el uso mas interesante (creo yo) es la posibilidad que tiene Kainy de mandar streamings de partes de una pantalla, y poder conectar mas de un dispositivo al mismo servidor.



Con esta característica, se pueden conseguir cosas interesantes como en este vídeo



Donde básicamente he cargado un emulador de GameCube en el ordenador, he cargado un juego que permite jugar 2 players a pantalla dividida, y aprovechando esto mismo, he enviado la mitad superior del juego a una consola, y la parte inferior a otra consola, obteniendo 2 juegos "separados" en 2 consolas, y que se comportan como juegos independientes en cada una (como si fuese un juego en red)

Para esto basicamente he cargado un layout Player 1 en una consola, con su slot de hardware en "Player 1", y en el otro dispositivo un layout y slot de hardware "Player 2"



Como VJoy (y x360CE) ya están configurados con los 2 mandos, es muy fácil mapearlos en el emulador (o en un juego) y obtener 2 "pantallas independientes" con mandos independientes para cada una.


Cambio en prioridades


con el juego en ejecución, abrimos el administrador de tareas y seleccionamos "kainy.exe *32" (el proceso de Kainy) y le establecemos la prioridad a "por encima de lo normal". Buscamos el proceso de nuestro juego que tenemos en ejecución, y establecemos la prioridad a la misma "por encima de lo normal"

Se puede probar con esta prioridad y establecerla a "alta" en ambos casos, pero nunca ponerla a "tiempo real", por que ya no tendremos control sobre windows. Se aconseja tener siempre ambos procesos con la misma prioridad.


Ultimas notas


Tal como se ha comentado en el artículo, evitar IPs dinámicas, y conexiones WIFI. Usar siempre conexiones por cable.

En android evitar cualquier programa que pueda estar trabajando en segundo plano (actualizaciones automáticas de google, por ejemplo) y que nos quiten ancho de banda para nuestro streaming.

Y sobre todo aplear al ingenio y al uso del sentido común.


¿Y que viene ahora?


Esta guía la he publicado con las versiones actuales de cada programa, poniendo todo mi empeño en simplificar el proceso para aquellos usuarios que no tienen los conocimientos o destreza necesarios para lograr llegar a realizar un streaming con un control sobre los juegos. He visto muchos comentarios en la web donde indican que configurar Kainy o Splashtop es muy complicado, y dejan de intentarlo por lo mismo.

No es complicado, solo basta hacerse un poco a la idea de como trabajan.

También la he publicado antes de lo previsto. En principio quería hacer pruebas de conectividad y uso de gamestreaming por internet, pero la conexión que esperaba (Fibra) no ha llegado a tiempo, y no he logrado dar con alguien que me ayude a realizar pruebas.

Además he logrado ponerme en contacto con el desarrollador de Kainy, y me ha comentado cosas muy interesantes para la próxima "versión grande", que será la 1.75, y que incluye varias mejoras, modificaciones, y nuevas características que harán el proceso mucho mas simple de lo que he explicado aquí.

Cuando tengamos esta versión, publicaré una guía rápida para hacer streaming (tranquilos, será algo mucho mas resumido), con las correspondientes actualizaciones en los métodos y configuraciones.

Palabras finales


Me he extendido en esta guía, por que la primera parte es algo como un "libro de ruta", pasando por varias etapas e investigaciones que hice, con la idea de que alguien que se lo lea se le ocurran nuevas cosas para investigar y proponer.

Espero que no haya resultado muy pesado leer este ladrillo, y espero vuestras opiniones, colaboraciones y comentarios al respecto.

Para quien quiera ver mas vídeos de streaming, he generado una lista de reroducción en mi canal de youtube.



Zalu2!

Deen0X

6 comentarios:

  1. Hola Deen0x!! Dentro de poco voy a tener que tomar una decisión MUY importante: ¿Cual demonios eligo?
    ¿JXD 7800b Oooooo Archos Gamepad 2?
    Necesito que hagas una comparativa entre ambas porque son muy parecidas, la Archos me parece más bonita y de una compañía más fiable, pero la JXD cuenta con más apoyo de scene android. No se si cosas como el Swap se pueden hacer en la Archos Gamepad 2 (en un foro dicen que puedes mover manualmente los datos desde la consola hasta la microSD, pero esto me parece algo azaroso). Se que necesitas que te manden las consolas para poder analizarlas, pero la Archos esta a la venta desde Noviembre. Espero que puedas hacer una de tus magnificas reviews. GRACIAS DEEN0X!!!

    ResponderEliminar
  2. Buenas Alex.
    Sobre la Archos Gamepad 2, desde ya te digo que no voy a comprarla. Si alguien está interesado en que haga review, que me envíen una consola.
    Yo después de la experiencia de la Archos Gamepad 1, no repito experiencia con esta marca.
    He leído comentarios que hablan favorablemente del dispositivo, pero para mi sigue siendo una Archos y, lamentandolo mucho, es un problema para mi, por que Archos no se caracteriza por dar soporte serio y prolongado a sus dispositivos, como mucho sacar parches para problemas gordos. En este sentido, curiosamente las compañías como JXD están haciendo mas por los clientes que marcas mas "prestigiosas".
    Por otra parte, la JXDS7800B está teniendo una popularidad muy grande gracias al famoso error de DealExtreme (que la puso a 37€), y que ha mandado a muchos usuarios las consolas, por tanto goza de buena popularidad y es muy posible que salgan algunas roms para ella, eso sí, nada como la Legacy de Skelton, basada en los sources de la S7300B, y según he sabido, es posible que tengamos un cambio en algunas cosas del firmware, pero no estoy claro si serán para bien o para mal (espero que no vayamos un paso atrás)
    Como sea, si puedes conseguir una Archos Gamepad 2 y la pruebas, ya sacas tus propias conclusiones.
    Además, piensa en que estas consolas tienen un ciclo de popularidad de unos 6 meses. De aquí al verano tendremos noticias de las nuevas consolas que estén por venir, y seguro que ya las mirarás con ojitos brillantes, esperando pillarte una.
    Zaul2!

    ResponderEliminar
  3. Hola! sabes que tengo un problema, cuando me intento conectar con el Splashtop Remote PC Gaming THD desde mi tablet no me deja, me dice la aplicacion se ha detenido apenas pongo conectar. Ya lo intente un monton de veces pero no me conecta, sabes como lo puedo arreglar?

    ResponderEliminar
  4. Prueba a conectar el PC utilizando un cable de red, y apagando el WIFI.

    y voy a suponer que estás utilizando una versión comprada de Splashtop THD, por lo que mi recomendación es que desinstales tu versión actual, tanto en el PC (el streamer) como en la tablet, y a continuación instales ambos desde la página (google play, página oficial).

    El problema que te da si no me equivoco es por que estás utilizando versiones distintas del streamer (servidor en windows) y de android.

    Recuerda que Splashtop se actualizó hace no mucho, y que ahora tiene nuevas funciones (como soporte para emular un mando de X360), y que si se te ha actualizado alguno de los componentes (cliente o servidor), necesitas actualizar ambas partes para que funcione.

    Zalu2!

    ResponderEliminar
  5. Excelente muchas gracias por ayudarme a encontrar la consola perfecta para mi casa, en una tienda para gamer podré encontrar ambas y seguir jugando tranquilamente.

    ResponderEliminar
  6. instales tu versión actual, tanto en el PC (el streamer) como en la tablet, y a continuación instales ambos desde la página (google play, página oficial).

    El problema que te da si no me equivoco es por que estás utilizando versiones distintas del streamer (servidor en windows) y de android. https://coaching-mastery.com/6-maneras-de-hacer-tu-coche-mas-rapido/

    ResponderEliminar