
Teilen Sie:
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 und OpenTok, Take Two!
Lesedauer: 4 Minuten
Die Zeit ist schnell vergangen, seit wir vor einem Jahr zum ersten Mal darüber sprachen Verwendung von OpenTok in Unity, der plattformübergreifenden Echtzeit-Spielengine, vor einem Jahr. Vor einem Monat haben wir unsere erste Iteration mit Unity3d in der Betaversion von OpenTok v2.16 vorgestellt. Unity ermöglicht es Entwicklern, 3D-, 2D-, VR- und AR-Visualisierungen für Spiele auf verschiedenen Plattformen und Geräten zu erstellen, darunter Konsolen-, PC-, Mobile-, Instant-, AR- und VR-Spiele.
In dieser zweiten Iteration haben wir den plattformübergreifenden Faktor von Unity genutzt, um ein Beispiel zu erstellen, das auf denselben Plattformen wie OpenTok läuft. Zuvor haben wir ein Beispiel für Windows mit Unity und dem OpenTok Windows SDK erstellt. Mit dem neuen Beispiel können Sie Ihre Anwendung oder Ihr Spiel auf Android, iOS, Windows und MacOS ausführen, ohne eine einzige Zeile Ihres Codes zu ändern.
Wenn Sie es unbedingt ausprobieren möchten, holen Sie sich das Beispiel aus dem GitHub-Repositoriumund öffnen Sie es mit Ihrem Unity-Editor, um es für die Plattform Ihrer Wahl zu erstellen.
Moment, ist das Magie? Wie funktioniert es?
Werfen wir einen Blick auf dieses einfache Blockdiagramm, um zu sehen, wie alles aufgebaut ist:
In dem neuen Beispiel haben wir alle unterstützten OpenTok-Plattformbibliotheken gebündelt, so dass Unity das richtige SDK auswählt, wenn ein Entwickler ein Spiel für eine bestimmte Plattform erstellt.
Im Diagramm haben wir verschiedene Farben verwendet, um die einzelnen Teile des Beispiels zu unterscheiden. Die blauen Kästchen sind .NET-Komponenten, die zur Unity-Laufzeit ausgeführt werden. Es gibt drei verschiedene Komponenten zu berücksichtigen: In Blau sehen Sie den Code Ihres Spiels oder Ihrer Anwendung.
Außerdem ist der OpenTok-Client-Code, der mit dem OpenTok-SDK und der Unity-Engine interagiert, ebenfalls blau.
Der grüne Kasten stellt die OpenTok SDK API dar. Hier befinden sich die bekannten Klassen Session, Publisher und Subscriber. Da Unity .NET und genauer gesagt die Sprache C# verwendet, haben wir die gleiche API wie das Windows SDK benutzt.
Und schließlich sind da noch die gelben Kästchen. Sie stellen den nativen Code dar, der auf der Plattform Ihrer Wahl laufen wird, sobald Sie die endgültige ausführbare Version Ihres Spiels erstellt haben. Jetzt können wir unser endgültiges Ziel sehen und den gleichen Code auf allen Plattformen ausführen. Dies ist der OpenTokUnity.dll zu verdanken, die Session-, Publisher- oder Subscribe-Interaktionen in den nativen Code jeder Plattform überträgt.
Was die Datei-Artefakte betrifft, so befindet sich alles unter Ordner Assets/DLL,

Wie Sie in dieser Aufnahme sehen können, gibt es die Datei OpenTokUnity.dll, und in jedem Ordner befindet sich die zugehörige Bibliothek. Sie finden die gleichen Binärdateien, die wir über unsere offiziellen Kanäle wie cocoapods, nuget oder maven verteilen.
Wenn Sie diesen Ansatz in Ihrem Projekt verwenden möchten, sollten Sie den gesamten Inhalt von Assets/DLL in Ihr Projekt kopieren. (Vergessen Sie nicht, die .meta-Dateien zu kopieren, da sie Informationen über die Plattformziele für jede Datei enthalten)
An der Wurzel von allem steht etwas C#-Code
Nachdem wir nun die Rolle der einzelnen Komponenten in der Gleichung behandelt haben, können wir nun näher darauf eingehen, wie es in Unity funktioniert. Alles, was Sie für einen Videoaufruf in einem Unity-Spiel oder einer Applikation benötigen, finden Sie in dem Beispiel und seinen vier Dateien. 
SceneScript
Dieses Skript ist an eine GameObject-Szene angehängt. Es wird ausgeführt, wenn das Beispiel startet, und erstellt hauptsächlich ein OpenTokSession Objekts.
Diese Klasse enthält zwei GameObject-Instanzen. Eine für den Herausgeber und eine für den Abonnenten. Das Video wird in der Szene innerhalb des Inhalts der GameObjects angezeigt. Außerdem werden beide GameObjects im OpenTokSession-Konstruktor verwendet. Wir werden im Detail sehen, wie Video-Frames in den GameObjects enden.
Sie ruft auch die Connect() Methode auf, um eine Verbindung zu einer OpenTok-Sitzung herzustellen.
Bitte beachten Sie, dass diese Datei eine Unterklasse von MonoBehaviourist, was bedeutet, dass ihre Update Methode in regelmäßigen Abständen von der Unity-Engine aufgerufen wird. Dieses Skript benachrichtigt die OpenTokSession Instanz über diese Aktualisierung.
OpenTokSession
OpenTokSession bezieht sich auf die Hauptdatei, in der alle OpenTok SDK-Interaktionen stattfinden. Es ist auch die Datei, die OpenTokUnity.dll aufruft.
Es handelt sich nicht um eine Monobehaviour-Unterklasse, so dass keine Methode automatisch von Unity aufgerufen wird.
Der meiste Code in dieser Klasse befasst sich mit der Verbindung zu einer OpenTok-Sitzung. Dazu gehören Dinge wie: Implementierung von OpenTok-Ereignissen, Veröffentlichung und Abonnieren. Es sieht sehr ähnlich aus wie das, was Sie in unseren Plattform-Beispielen finden, wenn Sie nach Basic Video Chat Beispielanwendungen suchen.
Es gibt jedoch ein wichtiges Detail darüber, wie Publisher und Subscriber erstellt werden. Schauen wir uns zum Beispiel an, wie ein neuer Publisher erstellt wird:
publisher = new Publisher(Context.Instance, renderer:
publisherRenderer, capturer:videoCapturer);Die Renderer- und Capturer-Parameter sind in OpenTok SDK sehr verbreitet. Auf einigen Plattformen wie iOS oder Android müssen Sie sie nicht angeben, weil OpenTok SDK eine Standardimplementierung hat, die verwendet werden kann.
Dieses Beispiel funktioniert auf allen Plattformen. Wenn Sie einen Renderer und einen Capturer haben möchten, der plattformübergreifend funktioniert, dann wäre ein Ansatz, den Sie in Betracht ziehen sollten, das Unity SDK zu verwenden, um den Capturer und Renderer zu erstellen.
OpenTokRenderer
Die Hauptaufgabe dieser Klasse ist, wie der Name schon sagt, das Rendern von Video-Frames innerhalb einer GameObject-Textur.
Zu diesem Zweck ist diese Klasse eine Unterklasse von MonoBehaviour und implementiert die Opentok IVideoRenderer-Schnittstelle.
Da es sich um eine Monobehaviour-Unterklasse handelt, wird sie mit Publisher- oder Subscriber-GameObjects verbunden. Sie hat Zugriff auf die Texture2D-Instanz, in der sie die Video-Frames rendert.
Da er die OpenTok IVideoRenderer-Schnittstelle implementiert, wird seine RenderFrame-Methode aufgerufen, wenn ein neuer Videoframe zum Rendern bereit ist.
Wenn Sie mehr Details darüber erfahren wollen, wie das Beispiel Frames rendert, schauen Sie sich bitte den Klassencode.
OpenTokVideoCapture
Das letzte Teil des Puzzles ist der Capturer. Die Rolle dieser Klasse ist sehr einfach. Sie verwendet die Einheitsklasse WebCamTexture für den Zugriff auf die Gerätekamera und sendet die Videobilder von der Kamera an OpenTok SDK, indem sie die Schnittstelle IVideoCapturer implementiert.
Schlussfolgerung
Unsere erste Iteration des Beispiels zeigt Ihnen, wie RTC-Kommunikation in Unity funktioniert. In der neuen Version können Sie OpenTok für Video- und Audiokommunikation in einem realen Unity-Spiel oder einer Applikation verwenden.
Wenn Sie Ihre Nutzerbasis erweitern wollen, ist es wichtig, dass Sie Ihr Spiel auf verschiedenen Plattformen bereitstellen können - deshalb war es unser Ziel, so viele Plattformen wie möglich zu unterstützen.
Teilen Sie:
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.