
Partager:
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.
Unity et OpenTok, deux exemples à suivre !
Temps de lecture : 5 minutes
Le temps a passé vite, depuis que nous avons parlé pour la première fois, il y a un an, de l'utilisation de l'utilisation d'OpenTok dans Unity, le moteur de jeu multiplateforme en temps réel, il y a un an. Il y a un mois, nous avons présenté notre première itération avec Unity3d en version bêta, lors de la sortie de la version 2.16 d'OpenTok. Unity permet aux développeurs de créer des visualisations 3D, 2D, VR et AR pour les jeux sur toutes les plateformes et tous les appareils, y compris les jeux sur console, PC, mobile, instantané, AR et VR.
Dans cette deuxième itération, nous avons exploité le facteur multiplateforme d'Unity pour construire un échantillon qui fonctionne sur les mêmes plateformes qu'OpenTok. Précédemment, nous avons construit un exemple pour fonctionner sous Windows en utilisant Unity et OpenTok Windows SDK. Dans le nouvel échantillon, vous serez en mesure d'exécuter votre application ou votre jeu sous Android, iOS, Windows et MacOS, et tout cela sans modifier une seule ligne de votre code.
Si vous êtes impatient de le tester, téléchargez l'exemple sur le site GitHub repoouvrez-le avec votre éditeur Unity et commencez à le construire pour la plateforme de votre choix.
Attendez, c'est de la magie ? Comment cela fonctionne-t-il ?
Jetons un coup d'œil à ce schéma fonctionnel simple pour voir comment tout est organisé :
Dans le nouvel exemple, nous avons regroupé toutes les bibliothèques OpenTok supportées par la plateforme, afin qu'Unity choisisse le bon SDK lorsqu'un développeur construit un jeu pour une plateforme donnée.
Dans le diagramme, nous avons utilisé des couleurs différentes pour différencier chaque partie de l'échantillon. Les cases en bleu sont des composants .NET qui sont exécutés par Unity. Il y a trois composants différents à prendre en compte : En bleu, vous pouvez voir le code de votre jeu ou application.
En plus de cela, on trouve également en bleu le code du client OpenTok qui interagit avec le SDK OpenTok et le moteur Unity.
Le cadre vert représente l'API du SDK OpenTok. C'est là que se trouvent les célèbres classes Session, Publisher et Subscriber. Comme unity utilise .NET et, plus précisément, le langage C#, nous avons utilisé la même API que le SDK Windows.
Enfin, il y a les cases jaunes. Elles représentent le code natif qui s'exécutera sur la plateforme de votre choix, une fois que vous aurez construit la version exécutable finale de votre jeu. Nous pouvons maintenant voir notre objectif final et exécuter le même code sur toutes les plateformes. Ceci grâce à OpenTokUnity.dll, qui transporte les interactions Session, Publisher ou Subscribe vers le code natif de chaque plateforme.
En ce qui concerne les artefacts des fichiers, tout se trouve dans le dossier Dossier Assets/DLL,

Comme vous pouvez le voir dans cette capture, il y a un fichier OpenTokUnity.dll, et dans chaque dossier se trouve sa bibliothèque native. Vous trouverez les mêmes binaires que ceux que nous distribuons via nos canaux officiels comme cocoapods, nuget, ou maven.
Si vous souhaitez utiliser cette approche dans votre projet, vous devez copier tout le contenu de Assets/DLL dans votre projet. (N'oubliez pas de copier les fichiers .meta, car ils contiennent des informations sur les plates-formes cibles de chaque fichier).
À la base de tout, il y a du code C#
Maintenant que nous avons couvert le rôle de chaque composant de l'équation, nous pouvons entrer dans les détails de son fonctionnement au sein d'Unity. Tout ce dont vous avez besoin pour avoir un appel vidéo dans un jeu ou une application Unity se trouve dans l'échantillon et ses quatre fichiers. 
SceneScript
Ce script est attaché à une scène GameObject. Il s'exécutera au démarrage de l'échantillon, en créant principalement un OpenTokSession objet.
Cette classe contient deux instances de GameObject. L'une pour l'éditeur et l'autre pour l'abonné. La Video apparaîtra dans la scène dans le contenu des GameObjects. En outre, les deux GameObjects sont utilisés dans le constructeur d'OpenTokSession. Nous verrons plus en détail comment les images vidéo se terminent dans les GameObjects.
Il appelle également la méthode Connect() pour se connecter à la session opentok.
Veuillez noter que ce fichier est une sous-classe de MonoBehaviource qui signifie que sa méthode Update sera appelée périodiquement par le moteur Unity. Ce script notifiera l'instance OpenTokSession de cette mise à jour.
OpenTokSession
OpenTokSession fait référence au fichier principal dans lequel se produisent toutes les interactions du SDK OpenTok. C'est également le fichier qui appelle OpenTokUnity.dll.
Il ne s'agit pas d'une sous-classe Monobehaviour, aucune méthode ne sera donc appelée automatiquement depuis Unity.
La plupart du code de cette classe concerne la connexion à une session OpenTok. Il s'agit notamment de la mise en œuvre des événements OpenTok, de la publication et de la souscription. Cela ressemble beaucoup à ce que vous trouverez dans les référentiels d'exemples de notre plateforme, lorsque vous chercherez des exemples d'applications Basic Video Chat.
Cependant, il existe un détail important concernant la création d'un éditeur et d'un abonné. Voyons, par exemple, comment un nouvel éditeur est créé :
publisher = new Publisher(Context.Instance, renderer:
publisherRenderer, capturer:videoCapturer);Les paramètres de rendu et de capture sont très courants dans OpenTok SDK. Sur certaines plateformes comme iOS ou Android, il n'est pas nécessaire de les fournir car OpenTok SDK dispose d'une implémentation par défaut qui peut être utilisée.
Cet exemple fonctionne sur toutes les plateformes. Si vous souhaitez disposer d'un moteur de rendu et d'un capteur fonctionnant sur toutes les plates-formes, vous pouvez envisager d'utiliser le SDK Unity pour créer le capteur et le moteur de rendu.
OpenTokRenderer
La principale responsabilité de cette classe est, comme son nom l'indique, de rendre les images vidéo au sein d'une GameObject Texture.
Dans cette optique, cette classe est une sous-classe de MonoBehaviour et implémente l'interface Opentok IVideoRenderer.
Comme il s'agit d'une sous-classe Monobehaviour, elle sera attachée aux GameObjects Publisher ou Subscriber. Elle a accès à l'instance Texture2D dans laquelle elle rendra les images vidéo.
Comme il met en œuvre l'interface OpenTok IVideoRenderer, sa méthode RenderFrame est appelée lorsqu'une nouvelle image vidéo est prête à être rendue.
Si vous souhaitez obtenir plus de détails sur la façon dont l'exemple rend les cadres, veuillez jeter un coup d'œil au code de la classe.
OpenTokVideoCapture
La dernière pièce du puzzle est le capteur. Le rôle de cette classe est très simple. Elle utilise la classe d'unité WebCamTexture pour accéder à la caméra de l'appareil, et envoie les images vidéo de la caméra à OpenTok SDK en implémentant l'interface IVideoCapturer.
Conclusion
Notre première itération de l'échantillon vous montre comment les communications RTC fonctionnent dans Unity. Dans la nouvelle version, vous pouvez utiliser OpenTok pour la communication vidéo et audio dans un jeu ou une application Unity du monde réel.
Si vous souhaitez élargir votre base d'utilisateurs, il est essentiel de pouvoir déployer votre jeu sur différentes plateformes. C'est pourquoi notre objectif était de prendre en charge autant de plateformes que possible.
Partager:
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.