https://a.storyblok.com/f/270183/130444/e9b33bace7/e_unity_opentok_1200x600.jpg

Unity y OpenTok, ¡toma dos!

Publicado el May 7, 2021

Tiempo de lectura: 5 minutos

El tiempo ha pasado rápido, desde que hablamos por primera vez sobre OpenTok en Unity, el motor de juegos multiplataforma en tiempo real, hace un año.. Un avance rápido hasta hace un mes, y presentamos nuestra primera iteración con Unity3d en beta, durante nuestro lanzamiento v2.16 de OpenTok. Unity permite a los desarrolladores crear visualizaciones en 3D, 2D, realidad virtual y realidad aumentada para juegos de distintas plataformas y dispositivos, incluidos juegos de consola, PC, móviles, instantáneos, realidad aumentada y realidad virtual.

En esta segunda iteración, aprovechamos el factor multiplataforma de Unity para construir una muestra que funcione en las mismas plataformas que OpenTok. Anteriormente, construimos una muestra para funcionar en Windows usando Unity y OpenTok Windows SDK. En la nueva muestra, podrás ejecutar tu aplicación o juego en Android, iOS, Windows y MacOS, y todo ello sin modificar ni una sola línea de tu código.

Si quieres probarlo, coge la muestra del repositorio de repositorio de GitHubábrelo con tu editor de Unity y empieza a crearlo para la plataforma de tu elección.

Espera, ¿esto es magia? ¿Cómo funciona?

Echemos un vistazo a este sencillo diagrama de bloques para ver cómo está dispuesto todo: En la nueva muestra, hemos incluido todas las bibliotecas de plataforma OpenTok compatibles, de modo que Unity elija el SDK correcto cuando un desarrollador cree un juego para una plataforma determinada.

En el diagrama, hemos utilizado diferentes colores para diferenciar cada parte de la muestra. Las cajas en azul son componentes .NET que están en Unity runtime. Hay tres componentes diferentes a considerar: En azul, puedes ver el código de tu juego o aplicación.

Además de eso, también en azul está el código del cliente OpenTok que interactúa con OpenTok SDK y el motor Unity.

El recuadro verde representa la API del SDK de OpenTok. Aquí es donde viven las conocidas clases Session, Publisher y Subscriber. Dado que unity utiliza .NET y, más concretamente, el lenguaje C#, utilizamos la misma API que Windows SDK.

Y por último, están los recuadros amarillos. Representan el código nativo que se ejecutará en la plataforma elegida, una vez que construyas la versión ejecutable final de tu juego. Ahora podemos ver nuestro objetivo final y ejecutar el mismo código en todas las plataformas. Esto es gracias a OpenTokUnity.dll, que transporta las interacciones Session, Publisher o Subscribe al código nativo en cada plataforma.

En términos de artefactos de archivo, todo está bajo Carpeta Assets/DLL,

Como puedes ver en esta captura, existe el archivo OpenTokUnity.dll, y dentro de cada carpeta vive su librería nativa. Encontrarás los mismos binarios que distribuimos a través de nuestros canales oficiales como cocoapods, nuget o maven.

Si desea utilizar este enfoque en su proyecto, debe copiar todo el contenido de Assets/DLL en su proyecto. (No olvides copiar los archivos .meta, ya que contienen información sobre los objetivos de plataforma de cada archivo).

En la raíz de todo hay algo de código C#

Ahora que hemos cubierto el papel de cada componente en la ecuación, podemos entrar en más detalles sobre cómo funciona dentro de Unity. Todo lo que necesitas para tener una llamada de Video dentro de un juego Unity o aplicación está dentro de la muestra y sus cuatro archivos.

SceneScript

Este script se adjunta a una Escena GameObject. Se ejecutará cuando se inicie la muestra, principalmente creando un OpenTokSession objeto.

Esta clase contiene dos instancias de GameObject. Una para el editor y otra para el suscriptor. Video aparecerá en la escena dentro del contenido de los GameObjects. Además, ambos GameObjects son utilizados en el constructor de OpenTokSession. Veremos con más detalle cómo terminan los fotogramas de Video en los GameObjects.

También llama al método Connect() para conectarse a la sesión opentok.

Tenga en cuenta que este archivo es una subclase de MonoBehaviourlo que significa que su método Update será llamado periódicamente desde el motor Unity. Este script notificará a la instancia OpenTokSession sobre esta actualización.

OpenTokSession

OpenTokSession se refiere al archivo principal donde ocurren todas las interacciones del SDK de OpenTok. También es el archivo que llama a OpenTokUnity.dll.

Esta no es una subclase Monobehaviour, por lo que ningún método será llamado automáticamente desde Unity.

La mayor parte del código en esta clase es sobre la conexión a una sesión OpenTok. Esto incluye cosas como: implementar eventos opentok, publicar y suscribirse. Parece muy similar a lo que encontrarás en nuestros repositorios de ejemplos de la plataforma, cuando busques ejemplos de aplicaciones básicas de Video Chat.

Sin embargo, hay un detalle importante sobre cómo se crea un Publisher y un Subscriber. Veamos, por ejemplo, cómo se crea un nuevo Publisher:

publisher = new Publisher(Context.Instance, renderer: 
publisherRenderer, capturer:videoCapturer);

Los parámetros de renderizador y capturador son muy comunes en OpenTok SDK. En algunas plataformas como iOS o Android, no es necesario proporcionarlos porque OpenTok SDK tiene una implementación por defecto que se puede utilizar.

Esta muestra funciona en todas las plataformas. Si quieres tener un renderizador y un capturador que funcione en todas las plataformas, entonces un enfoque a considerar sería usar Unity SDK para construir el capturador y el renderizador.

OpenTokRenderer

La principal responsabilidad de esta clase es, como su nombre indica, renderizar fotogramas de video dentro de un GameObject Texture.

Con este propósito en mente, esta clase es una subclase de MonoBehaviour e implementa la interfaz IVideoRenderer de Opentok.

Como es una subclase Monobehaviour, será adjuntada a GameObjects Publisher o Subscriber. Tiene acceso a la instancia Texture2D donde renderizará los fotogramas de Video.

Como implementa la interfaz OpenTok IVideoRenderer, su método RenderFrame será llamado cuando un nuevo videoframe esté listo para ser renderizado.

Si desea obtener más detalles sobre cómo la muestra renderiza los marcos, por favor, eche un vistazo al código de clase.

OpenTokVideoCapture

La última pieza del puzzle es el capturador, el rol de esta clase es muy simple. Utiliza la clase de unidad WebCamTexture para acceder a la cámara del dispositivo, y enviar los fotogramas de vídeo de la cámara a OpenTok SDK mediante la implementación de la interfaz IVideoCapturer.

Conclusión

Nuestra primera iteración de la muestra muestra cómo funciona la comunicación RTC en Unity. En la nueva versión, puedes usar OpenTok para comunicación de Video y audio en un Juego o Aplicación Unity del mundo real.

Si quieres ampliar tu base de usuarios, es fundamental que puedas desplegar tu juego en distintas plataformas, por eso nuestro objetivo era admitir tantas plataformas como fuera posible.

Compartir:

https://a.storyblok.com/f/270183/400x400/0444469466/roberto-perez-cubero.png
Roberto Perez Cubero

Roberto is a Full Stack Engineer on the OpenTok Client SDK team. He loves learning new bits of Android, iOS, Linux, Windows, you name it! In his free time, he is very passionate about programming languages, computer graphics, and video game development for current and old platforms like ZX Spectrum and Commodore 64.