Swift

Visión general

Suscríbete a una transmisión remota y asigna networkStatsDelegate para que recibas notificaciones sobre las estadísticas. En iOS, las estadísticas de vídeo, audio y enlaces multimedia (incluidas las relativas al estado de la red eventos) se distribuyen a través de un único OTSubscriberKitNetworkStatsDelegate—no se trata de objetos de escucha independientes, como en Android.

La gestión de las llamadas de retorno se implementa en el siguiente paso.

1. Suscribirse y registrar el delegado de estadísticas de red

Cuando se crea un flujo remoto, crea un OTSubscriber, configurar los delegados y suscribirse:

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)")
    }
}
Delegado Qué ofrece
OTSubscriberDelegate Ciclo de vida de la conexión, perspectiva del abonado
OTSubscriberKitNetworkStatsDelegate Estadísticas de vídeo y audio, enlace multimedia estadísticas, estado de la red eventos

Específico para iOS: Establecer networkStatsDelegate en el abonado Por ejemplo. No hay ningún registro independiente de «escuchador de enlaces multimedia»; se implementa mediaLinkStatsUpdated y networkConditionChanged del mismo tipo de delegado.

2. Borrar el estado cuando finalice la transmisión

Restablecer el estado de observabilidad cuando se elimine el flujo:

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

En subscriberDidConnect, asigna la vista de suscriptor para SwiftUI:

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

Siguiente: Implementa los métodos delegados de estadísticas de red y fusiona los datos para la superposición.