Twilio-Migrationsanleitung (iOS)
Dieser Leitfaden führt Sie durch die Migration Ihrer bestehenden Twilio Videoanwendung zu Vonage Video.
Für größtmögliche Flexibilität und Vielseitigkeit bei der Programmierung Ihrer Videolösung ist die Vonage Video API iOS SDK hat für Sie gesorgt.
Wenn Ihre Anforderungen über einfache Videofunktionen hinausgehen und Funktionen wie Broadcasting, SIP-Integration, Medienverarbeitung und anpassbare Stream-Einstellungen umfassen, werden Sie feststellen, dass das Vonage Video iOS SDK unübertroffene Leistung und Flexibilität bietet.
Übersicht
Die Video APIs von Twilio und Vonage haben sehr ähnliche Konzepte. Dieser Leitfaden soll Sie bei der Migration Ihrer Videoanwendung unterstützen.
Ein wesentlicher Unterschied zwischen der Videoimplementierung von Twilio und Vonage ist die Verwendung von Zimmer SIDist dies ein Sitzungs-ID wenn es um Vonage geht. Wir werden uns ansehen, wie man eine SessionID erzeugen in einem späteren Abschnitt.
Sie benötigen außerdem eine Authentifizierungstoken wenn ein Client mit einer aktiven Sitzung verbunden wird.
Das folgende Diagramm veranschaulicht die architektonischen Unterschiede zwischen Twilio und Vonage Video.
Twilio Vonage Terminologie-Zuordnung
| Twilio | Vonage |
|---|---|
| Room | Session |
| Participants | Subscriber(s) + Publisher(s) |
| Tracks | Stream |
| RemoteTracks | Subscribers(s).stream |
| LocalTracks | Publisher(s).stream |
Video SDK-Anmeldeinformationen abrufen
Erstellen einer Entwickler Account um auf das Entwicklerportal zuzugreifen.
Um mit Video zu beginnen, müssen Sie eine Anwendung erstellen. Sie können die eine Anwendung erstellen Leitfaden zum Erhalt Ihrer Anwendungs-ID und privater Schlüssel.
Installieren Sie das SDK
Sie können das Vonage Video iOS SDK über das Swift-Paketmanager oder Kokospalmen:
Swift-Paketmanager verwenden
Um eine Paketabhängigkeit zu Ihrem Xcode-Projekt hinzuzufügen, wählen Sie Datei > Schnelle Pakete > Paketabhängigkeit hinzufügen und geben Sie die Repository-URL ein:
Verwendung von Cocoapods
Wenn Sie das SDK mit CocoaPods hinzufügen, bearbeiten Sie das Podfile und fügen Sie die folgende Zeile hinzu:
Speichern Sie die Änderungen an der Poddatei, öffnen Sie das Stammverzeichnis des Projekts im Terminal/der Kommandozeile und führen Sie es aus:
Dies sollte das Vonage Video SDK und seine Abhängigkeiten einbeziehen.
Sie können nun das SDK zu Ihrem View-Controller hinzufügen.
Öffnen Sie in Xcode Ihren ViewController.swift Datei und fügen Sie ganz oben in der Datei die folgenden Zeilen ein, um die Videobibliothek zu importieren:
import UIKit
import OpenTok
Authentifizierung
Das Vonage Video SDK verwendet Token, um Benutzer zu authentifizieren. Bei der Erstellung eines Tokens können Sie die Rolle des Benutzers festlegen (Abonnent, Herausgeber oder Moderator). Optional können Sie auch dem Token eine Zeichenfolge von Metadaten zuweisen (d. h. zur Identifizierung des verbundenen Kunden).
Bitte beachten Sie unser Anleitung zur Token-Erstellung um zu erfahren, wie man Token erzeugt. Die Token werden auf dem Server generiert und dann auf dem Client verwendet. Besuchen Sie die Server-seitige SDKs Leitfäden um mehr zu erfahren.
Erstellen Sie eine Videositzung
A Sitzung ist wie ein Zimmer. Alle Clients, die denselben Sitzungs-ID in der Lage sein, miteinander zu kommunizieren.
Wie Token, Sitzungen werden auf der Serverseite erstellt. Bitte beachten Sie unsere Erstellen eines Sitzungsleitfadens um mehr zu erfahren.
Um eine Sitzung zu erstellen und ein Token zu erzeugen, verwenden Sie eine unserer Server-SDKs.
Sie können alle Ihre Schlüssel als Eigenschaft in Ihrer ViewController.swift Datei:
// Replace with your Application ID
var kApplicationId = ""
// Replace with your generated session ID
var kSessionId = ""
// Replace with your generated token
var kToken = ""
Verbinden mit einer Videositzung
Wenn Sie alle Tasten eingestellt haben, können Sie nun eine Verbindung zu einer aktiven Videositzung herstellen.
Sie müssen dies tun, bevor Sie Ihren Audio-/Videostream in der Sitzung veröffentlichen oder die Streams anderer Teilnehmer anzeigen können.
Twilio
let twimlParamTo = "to"
let connectOptions: TVOConnectOptions = TVOConnectOptions(accessToken: accessToken) { (builder) in
builder.params = [twimlParamTo : “{to}”]
}
TwilioVoice.connect(with: connectOptions, delegate: self)
Vonage
class ViewController: UIViewController
var session: OTSession?
override func viewDidLoad() {
super.viewDidLoad()
connectToAnOpenTokSession()
}
func connectToAnOpenTokSession() {
// Important: Please note that your Application ID is your API key.
session = OTSession(apiKey: kApplicationId, sessionId: kSessionId, delegate: self)
var error: OTError?
session?.connect(withToken: kToken, error: &error)
if error != nil {
print(error!)
}
}
Ereignis-Listener
Vonage und Twilio verfügen über Delegierungsprotokolle, mit deren Hilfe Sie den Status einer Sitzung/eines Anrufs für alle mit einer Sitzung verbundenen Teilnehmer aufrechterhalten können.
Sitzungs-/Raumverbindungsänderungen
Twilio
// MARK: TVOCallDelegate
func callDidStartRinging(_ call: TVOCall) {
NSLog("callDidStartRinging:")
}
func callDidConnect(_ call: TVOCall) {
NSLog("callDidConnect:")
}
func call(_ call: TVOCall, isReconnectingWithError error: Error) {
NSLog("call:isReconnectingWithError:")
}
func callDidReconnect(_ call: TVOCall) {
NSLog("callDidReconnect:")
}
func call(_ call: TVOCall, didFailToConnectWithError error: Error) {
NSLog("Call failed to connect: \(error.localizedDescription)")
}
func call(_ call: TVOCall, didDisconnectWithError error: Error?) {
NSLog("Call disconnected")
}
Vonage
// MARK: - OTSessionDelegate callbacks
extension ViewController: OTSessionDelegate {
func sessionDidConnect(_ session: OTSession) {
print("The client connected to the Vonage Video API session.")
}
func sessionDidDisconnect(_ session: OTSession) {
print("The client disconnected from the Vonage Video API session.")
}
func session(_ session: OTSession, didFailWithError error: OTError) {
print("The client failed to connect to the Vonage Video API session: \(error).")
}
func session(_ session: OTSession, streamCreated stream: OTStream) {
print("A stream was created in the session.")
}
func session(_ session: OTSession, streamDestroyed stream: OTStream) {
print("A stream was destroyed in the session.")
}
}
Video veröffentlichen
Wenn ein Benutzer mit einer aktiven Sitzung verbunden ist, kann er über die Kamera und das Mikrofon des Geräts einen Audio-/Videostream für die Sitzung veröffentlichen:
Dies wird durch Hinzufügen einer Publisher-Eigenschaft zur ViewController-Klasse erreicht:
class ViewController: UIViewController, OTSessionDelegate {
var session: OTSession?
var publisher: OTPublisher?
Ändern Sie die Implementierung der OTSessionDelegate.sessionDidConnect(_:) Methode, um Code zur Veröffentlichung eines Streams in der Sitzung einzuschließen. Hier ist ein Beispiel:
func sessionDidConnect(_ session: OTSession) {
print("The client connected to the OpenTok session.")
let settings = OTPublisherSettings()
guard let publisher = OTPublisher(delegate: self, settings: settings) else {
Return
}
var error: OTError?
session.publish(publisher, error: &error)
guard error == nil else {
print(error!)
Return
}
guard let publisherView = publisher.view else {
Return
}
let screenBounds = UIScreen.main.bounds
publisherView.frame = CGRect(x: screenBounds.width - 150 - 20, y: screenBounds.height - 150 - 20, width: 150, height: 150)
view.addSubview(publisherView)
}
Das Vonage Video SDK regelt die Videoqualität automatisch, basierend auf den Netzwerkbedingungen und den Gerätefähigkeiten. Sie können jedoch bestimmte Eigenschaften konfigurieren, wie z. B. Entschließung, Bildfrequenzund Audio-Fallback.
Als nächstes werden wir Methoden aus der OTPublisherDelegate Protokoll. Dieses Protokoll enthält Methoden zur Behandlung von Ereignissen, die den Verlag betreffen.
Zu diesem Zweck können Sie den folgenden Code in Ihre ViewController.swift Datei:
// MARK: - OTPublisherDelegate callbacks
extension ViewController: OTPublisherDelegate {
func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) {
print("The publisher failed: \(error)")
}
}
Kamera ein-/ausschalten
Das Vonage SDK bietet einfache Methoden zur Steuerung der Kamera.
Twilio
participant?.unpublishVideoTrack(cameraManager.track)
self.cameraManager = nil
Vonage
// This will only stop publishing Video to the session. You can still see your local preview
publisher.publishVideo = false
// This will only stop publishing all media (audio and video) to the session. You can still see your local preview
var error: OTError?
session.unpublish(publisher, error: &error)
guard error == nil else {
print(error!)
Return
}
Rendering eines Fernbedienungsvideos
Ähnlich wie bei Twilio participantDidConnect und didSubscribeToVideoTrack Ereignis-Listener, Vonage löst auch aus connectionCreated und streamCreated Ereignisse, wenn ein entfernter Teilnehmer eine Verbindung zur Sitzung herstellt und mit dem Senden von Videos beginnt.
Twilio
func participantDidConnect(room: Room, participant: RemoteParticipant) {
print ("Participant \(participant.identity) has joined Room \(room.name)")
// Set the delegate of the remote participant to receive callbacks
participant.delegate = self
}
func participantDidDisconnect(room: Room, participant: RemoteParticipant) {
print ("Participant \(participant.identity) has left Room \(room.name)")
}
func didSubscribeToVideoTrack(videoTrack: RemoteVideoTrack,
publication: RemoteVideoTrackPublication,
participant: RemoteParticipant) {
print("Participant \(participant.identity) added a video track.")
if let remoteView = VideoView.init(frame: self.view.bounds,
delegate:self) {
videoTrack.addRenderer(remoteView)
self.view.addSubview(remoteView)
self.remoteView = remoteView
}
}
Vonage
class ViewController: UIViewController {
var session: OTSession?
var publisher: OTPublisher?
var subscriber: OTSubscriber?
func session(_ session: OTSession, streamCreated stream: OTStream) {
subscriber = OTSubscriber(stream: stream, delegate: self)
guard let subscriber = subscriber else {
return
}
var error: OTError?
session.subscribe(subscriber, error: &error)
guard error == nil else {
print(error!)
return
}
guard let subscriberView = subscriber.view else {
return
}
subscriberView.frame = UIScreen.main.bounds
view.insertSubview(subscriberView, at: 0)
}
// MARK: - OTSubscriberDelegate callbacks
extension ViewController: OTSubscriberDelegate {
public func subscriberDidConnect(toStream subscriber: OTSubscriberKit) {
print("The subscriber did connect to the stream.")
}
public func subscriber(_ subscriber: OTSubscriberKit, didFailWithError error: OTError) {
print("The subscriber failed to connect to the stream.")
}
}
Audio
Vonage verwaltet sowohl Audio als auch Video über ein einziges Publisher-Objekt. Wenn Sie die Veröffentlichung mit den Standardoptionen starten, veröffentlicht das SDK sowohl Audio als auch Video. Wenn Sie jedoch eine reine Audio-Sitzung bevorzugen, können Sie das Publisher-Objekt so konfigurieren, dass Video nicht veröffentlicht wird.
Mikrofon stummschalten
Bei Twilio müssen Sie die Audiospur abrufen, um das Mikrofon stumm zu schalten. Vonage vereinfacht dies durch die Bereitstellung einer einzigen aufrufbaren Methode.
Twilio
guard let micTrack = LocalAudioTrack(options: nil, enabled: true, name: TrackName.mic) else {
return
}
participant?.unpublishAudioTrack(micTrack)
Vonage
publisher.publishAudio = false
Mikrofon stumm schalten
Auch bei Twilio Video müssen Sie die Audiospur abrufen, um das Mikrofon stummzuschalten. Vonage vereinfacht dies durch die Bereitstellung einer einzigen aufrufbaren Methode.
Twilio
guard let micTrack = LocalAudioTrack(options: nil, enabled: true, name: TrackName.mic) else {
return
}
participant?.publishAudioTrack(micTrack)
Vonage
publisher.publishAudio = true
Text-Chat
Sie können Daten (d. h. Text-Chat-Nachrichten oder benutzerdefinierte JSON-Nachrichten) zwischen einzelnen Teilnehmern einer Sitzung sowie zwischen allen Teilnehmern einer Sitzung austauschen.
Die folgende Methode sendet eine Nachricht an Clients, die mit der Sitzung verbunden sind. Jedes Signal wird durch einen Stringtyp, der die Art der Nachricht angibt (in diesem Fall "Chat"), und einen String, der die Nachricht enthält, definiert:
func sendChatMessage(message: String) {
var error: OTError?
session.signal(withType: "chat", string: message, connection: nil, error: &error)
if let error {
print(error)
}
}
Wenn ein anderer mit der Sitzung verbundener Client eine Nachricht sendet, wird die Implementierung eines Callbacks von OTSessionDelegate ermöglicht es Ihnen, die Nachricht zu empfangen:
func session(_ session: OTSession, receivedSignalType type: String?, from connection: OTConnection?, with string: String?) {
print("Received signal type \(type) with message \(string)")
}
Sitzungen verlassen und beenden Der folgende Code zeigt, wie man eine aktive Sitzung beendet (einen Benutzer von einer Sitzung trennt).
Twilio
// To disconnect from a Room, we call:
room?.disconnect()
// This results in a callback to RoomDelegate#roomDidDisconnect(room: Room, error: Error?)
// MARK: RoomDelegate
func roomDidDisconnect(room: Room, error: Error?) {
print("Disconnected from room \(room.name)")
}
Vonage
var error: OTError?
session?.disconnect(&error)
if error != nil {
print(error!)
}
// MARK: OTSessionDelegate
func sessionDidDisconnect(_ session: OTSession) {
print("The client disconnected to the OpenTok session.")
}
Weitere Informationen:
- Vonage Video API iOS SDK
- Vonage Video iOS SDK-Referenz: Liste aller Klassen und Methoden, die mit dem iOS SDK verfügbar sind
- Code-Beispiele (Objective C): Objective C-basierte Beispiel-Applikationen, implementiert mit dem Vonage iOS SDK
- Code-Beispiele (Swift): Swift-basierte Beispiel-Applikationen, implementiert mit dem Vonage iOS SDK
- Anleitungen zur Erstellung von Video-Applikationen mit den Vonage SDKs