Swift

Übersicht

Einen Remote-Stream abonnieren und zuweisen networkStatsDelegate damit Sie Statistik-Callbacks erhalten. Unter iOS werden Statistiken zu Video, Audio und Medienlinks (einschließlich der Netzwerkbedingungen Veranstaltungen) werden über eine einzige OTSubscriberKitNetworkStatsDelegate—und nicht separate Listener-Objekte wie bei Android.

Die Callback-Verarbeitung wird im nächsten Schritt implementiert.

1. Den Netzwerkstatistik-Delegaten abonnieren und registrieren

Wenn ein Remote-Stream erstellt wird, erstelle einen OTSubscriber, Delegaten festlegen und abonnieren:

func session(_ session: OTSession, streamCreated stream: OTStream) {
    guard subscriber == nil else { return }

    let subscriber = OTSubscriber(stream: stream, delegate: self)
    subscriber.networkStatsDelegate = self   // OTSubscriberKitNetworkStatsDelegate
    self.subscriber = subscriber

    var error: OTError?
    session.subscribe(subscriber, error: &error)
    if let error {
        print("Subscribe error: \(error)")
    }
}
Beauftragter Was es bietet
OTSubscriberDelegate Lebenszyklus einer Verbindung, aus Sicht des Teilnehmers
OTSubscriberKitNetworkStatsDelegate Video-/Audio-Statistiken, Medienlink Statistiken, Netzwerkzustand Veranstaltungen

iOS-spezifisch: Satz networkStatsDelegate über die Teilnehmer Beispiel: Es gibt keine separate Registrierung eines „Media-Link-Listeners“ – implementieren mediaLinkStatsUpdated und networkConditionChanged vom gleichen Delegatentyp.

2. Status löschen, wenn der Stream endet

Den Observability-Status zurücksetzen, wenn der Stream zerstört wird:

func session(_ session: OTSession, streamDestroyed stream: OTStream) {
    subscriber = nil
    latestObservabilityStats = nil
    latestMediaLinkSnapshot = nil
    DispatchQueue.main.async {
        self.subView = nil
    }
}

Unter subscriberDidConnect, weisen Sie die Abonnentenansicht für SwiftUI zu:

func subscriberDidConnect(toStream subscriberKit: OTSubscriberKit) {
    if let view = subscriber?.view {
        DispatchQueue.main.async {
            self.subView = view
        }
    }
}

Weiter: Implementieren Sie die Delegate-Methoden für die Netzwerkstatistiken und führen Sie die Daten für das Overlay zusammen.