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

Unity e OpenTok, segunda tentativa!

Publicado em May 7, 2021

Tempo de leitura: 5 minutos

O tempo passou rápido desde que falamos pela primeira vez sobre o uso do OpenTok no Unity, a engine de jogos em tempo real e multiplataforma, há um ano. Avançando para um mês atrás, lançamos nossa primeira versão com o Unity3D em beta, durante o lançamento da versão 2.16 do OpenTok. O Unity permite que os desenvolvedores criem visualizações em 3D, 2D, RV e RA para jogos em diversas plataformas e dispositivos, incluindo jogos para console, PC, dispositivos móveis, jogos instantâneos, RA e RV.

Nesta segunda versão, aproveitamos a capacidade multiplataforma do Unity para criar um exemplo que roda nas mesmas plataformas que o OpenTok. Anteriormente, criamos um exemplo para funcionar no Windows usando o Unity e o SDK do OpenTok para Windows. No novo exemplo, você poderá rodar seu aplicativo ou jogo no Android, iOS, Windows e macOS, e tudo isso sem precisar alterar uma única linha do seu código.

Se você estiver ansioso para testá-lo, baixe o exemplo do repositório do GitHub, abra-o no seu Editor do Unity e comece a compilá-lo para a plataforma de sua preferência.

Espere aí, isso é mágica? Como funciona?

Vamos dar uma olhada neste diagrama de blocos simples para ver como tudo está organizado: No novo exemplo, reunimos todas as bibliotecas da plataforma OpenTok compatíveis, para que o Unity selecione o SDK correto quando um desenvolvedor estiver criando um jogo para qualquer plataforma.

No diagrama, usamos cores diferentes para diferenciar cada parte da amostra. As caixas em azul são componentes .NET que estão no runtime do Unity. Há três componentes diferentes a serem considerados: em azul, você pode ver o código do seu jogo ou aplicativo.

Além disso, também em azul está o código do cliente OpenTok que interage com o SDK do OpenTok e o motor Unity.

A caixa verde representa a API do SDK do OpenTok. É aqui que se encontram as conhecidas classes Session, Publisher e Subscriber. Como o Unity usa o .NET e, mais precisamente, a linguagem C#, utilizamos a mesma API do SDK do Windows.

E, por último, há as caixas amarelas. Elas representam o código nativo que será executado na plataforma escolhida, assim que você compilar a versão executável final do seu jogo. Agora podemos enxergar nosso objetivo final e executar o mesmo código em todas as plataformas. Isso é possível graças ao OpenTokUnity.dll, que transporta as interações de Session, Publisher ou Subscribe para o código nativo de cada plataforma.

No que diz respeito aos arquivos de arte-fato, tudo está na pasta pasta Assets/DLL,

Como você pode ver nesta captura de tela, há o arquivo OpenTokUnity.dll, e em cada pasta está sua biblioteca nativa. Você encontrará os mesmos binários que distribuímos por meio de nossos canais oficiais, como CocoaPods, NuGet ou Maven.

Se você quiser usar essa abordagem no seu projeto, deve copiar todo o conteúdo da pasta Assets/DLL para o seu projeto. (Não se esqueça de copiar os arquivos .meta, pois eles contêm informações sobre as plataformas de destino de cada arquivo)

Na raiz de tudo, há um código em C#

Agora que abordamos a função de cada componente da equação, podemos entrar em mais detalhes sobre como isso funciona no Unity. Tudo o que você precisa para realizar uma videochamada dentro de um jogo ou aplicativo do Unity está contido exemplo e seus quatro arquivos.

SceneScript

Este script está vinculado a um GameObject da cena. Ele será executado quando o exemplo for iniciado, criando principalmente um OpenTokSession objeto.

Essa classe contém duas instâncias de GameObject. Uma para o emissor e outra para o receptor. O Video aparecerá na cena dentro do conteúdo desses GameObjects. Além disso, ambos os GameObjects são utilizados no construtor da OpenTokSession. Veremos com mais detalhes como os quadros de Video chegam a esses GameObjects.

Ele também chama Connect() o método para se conectar à sessão do OpenTok.

Observe que este arquivo é uma subclasse de MonoBehaviour, o que significa que seu Update será chamado periodicamente pelo motor Unity. Este script notificará a OpenTokSession instância sobre essa atualização.

OpenTokSession

OpenTokSession refere-se ao arquivo principal onde ocorrem todas as interações do SDK do OpenTok. É também o arquivo que chama o OpenTokUnity.dll.

Esta não é uma subclasse de Monobehaviour; portanto, nenhum método será chamado automaticamente pelo Unity.

A maior parte do código desta classe trata da conexão com uma sessão do OpenTok. Isso inclui aspectos como: implementação de eventos do OpenTok, publicação e assinatura. É muito semelhante ao que você encontrará nos repositórios de exemplos da nossa plataforma, ao procurar Applications de bate-papo por vídeo básico.

No entanto, há um detalhe importante sobre como o Publisher e o Subscriber são criados. Vamos ver, por exemplo, como um novo Publisher é criado:

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

Os parâmetros “renderer” e “capturer” são muito comuns no SDK do OpenTok. Em algumas plataformas, como iOS ou Android, não é necessário fornecê-los, pois o SDK do OpenTok possui uma implementação padrão que pode ser utilizada.

Este exemplo funciona em todas as plataformas. Se você deseja ter um renderizador e um capturador que funcionem em todas as plataformas, uma abordagem a ser considerada seria usar o SDK do Unity para desenvolver o capturador e o renderizador.

OpenTokRenderer

A principal função desta classe é, como o próprio nome sugere, renderizar quadros de Video dentro de uma textura do GameObject.

Com esse objetivo em mente, esta classe é uma subclasse de MonoBehaviour e implementa a interface Opentok IVideoRenderer.

Por ser uma subclasse de Monobehaviour, ela será anexada a GameObjects do tipo Publisher ou Subscriber. Ela tem acesso à instância de Texture2D, na qual renderizará os quadros de Video.

Como ele implementa a interface OpenTok IVideoRenderer, seu método RenderFrame será chamado quando um novo quadro de vídeo estiver pronto para ser renderizado.

Se você quiser saber mais detalhes sobre como o exemplo renderiza os quadros, dê uma olhada no código da classe.

OpenTokVideoCapture

A última peça do quebra-cabeça é o capturador. A função dessa classe é muito simples. Ela utiliza a classe WebCamTexture do Unity para acessar a câmera do dispositivo e enviar os quadros de vídeo da câmera para o SDK do OpenTok, por meio da implementação da interface IVideoCapturer.

Conclusão

Nossa primeira versão do exemplo mostra como funciona a comunicação RTC no Unity. Na nova versão, você pode usar o OpenTok para comunicação de Video e áudio em um jogo ou Application do Unity no mundo real.

Se você deseja ampliar sua base de usuários, é fundamental ter a capacidade de lançar seu jogo em diferentes plataformas — e é por isso que nosso objetivo era oferecer suporte ao maior número possível de plataformas.

Compartilhar:

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.