Abonnieren von Streams anderer Kunden
Schließlich möchten wir, dass die Kunden in der Lage sind abonnieren auf die Streams anderer Clients in der Sitzung zugreifen (oder diese anzeigen):
- Hinzufügen einer
subscriber&subViewEigenschaften zumVonageVideoManagerKlasse:
final class VonageVideoManager: NSObject, ObservableObject {
private var session: OTSession?
private lazy var publisher: OTPublisher? = {
let settings = OTPublisherSettings()
settings.name = UIDevice.current.name
return OTPublisher(delegate: self, settings: settings)
}()
private var subscriber: OTSubscriber?
@Published var pubView: UIView?
@Published var subView: UIView?
Die OTS-Abonnent Klasse ist im iOS SDK definiert. Sie verwendet die Kamera und das Mikrofon des Geräts, um eine Stream Vonage Video-Sitzung zu abonnieren.
- Ändern Sie die Implementierung der
session(_: streamCreated)Methode (eine derOTSessionDelegateCallbacks), um Code zum Abonnieren der Streams anderer Clients in die Sitzung aufzunehmen:
func session(_ session: OTSession, streamCreated stream: OTStream) {
print("Session streamCreated: \(stream.streamId)")
var error: OTError?
defer {
if let error {
print(error)
}
}
let subscriber = OTSubscriber(stream: stream, delegate: self)
self.subscriber = subscriber
session.subscribe(subscriber, error: &error)
}
Wenn ein anderer Client einen Stream in einer Sitzung veröffentlicht, wird diese Methode aufgerufen, und ein OTStream Objekt übergeben wird. Die Website OTStream Klasse ist im iOS SDK definiert und repräsentiert einen Audio-Video-Stream in der Sitzung. Der Code initialisiert eine Instanz der Klasse OTSubscriber Klasse, die im iOS SDK definiert ist. Die OTSubscriber() Konstruktor benötigt zwei Parameter: Die OTStream Objekt (für den Stream, den Sie anzeigen möchten) und das Objekt, das die OTSubscriberDelegate Protokoll.
- Als nächstes werden wir Methoden der
OTSubscriberDelegateProtokoll. Dieses Protokoll enthält Methoden zur Behandlung von Ereignissen im Zusammenhang mit dem Abonnenten. Fügen Sie den folgenden Code an das Ende der DateiVonageVideoManager.swiftDatei, nach der schließenden Klammer derOTPublisherDelegateErweiterung:
// MARK: - OTSubscriberDelegate callbacks
extension VonageVideoManager: OTSubscriberDelegate {
func subscriberDidConnect(toStream subscriberKit: OTSubscriberKit) {
print("The subscriber did connect to the stream.")
if let view = subscriber?.view {
DispatchQueue.main.async {
self.subView = view
}
}
}
func subscriber(_ subscriber: OTSubscriberKit, didFailWithError error: OTError) {
print("Subscriber failed: \(error.localizedDescription)")
}
}
- Wenn der Client eine Verbindung zur Sitzung herstellt, wird die
subscriberDidConnect(_:)Methode aufgerufen wird. - Wenn der Client keine Verbindung zur Sitzung herstellen kann, wird ein OTError-Objekt an die
subscriber(_: didFailWithError:)Methode.
- Aktualisieren Sie schließlich den UI-Code, um auch die Abonnentenansicht einzubeziehen:
struct ContentView: View {
@ObservedObject var videoManager = VonageVideoManager()
var body: some View {
VStack {
videoManager.pubView.flatMap { view in
Wrap(view)
.frame(width: 200, height: 200, alignment: .center)
}.cornerRadius(5.0)
videoManager.subView.flatMap { view in
Wrap(view)
.frame(width: 200, height: 200, alignment: .center)
}.cornerRadius(5.0)
}
.task {
videoManager.setup()
}
}
}
Einfacher Video-Chat
Lernen Sie die grundlegenden Concepts der Vonage Video API-Plattform kennen und erfahren Sie, wie Benutzer über Video, Voice und Messaging kommunizieren können. Erkunden Sie einen grundlegenden Ablauf der Vonage Video API.