Swift

Visão geral

Inscreva-se em um fluxo remoto e atribua networkStatsDelegate para que você receba notificações de estatísticas. No iOS, estatísticas de vídeo, áudio e links de mídia (incluindo as condições da rede eventos) são fornecidos por meio de um único OTSubscriberKitNetworkStatsDelegate—e não objetos de escuta separados, como no Android.

O tratamento das chamadas de retorno é implementado na próxima etapa.

1. Inscrever-se e registrar o delegado de estatísticas de rede

Quando um fluxo remoto for criado, crie um OTSubscriber, definir delegados e se inscrever:

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 O que ele oferece
OTSubscriberDelegate Ciclo de vida da conexão, perspectiva do assinante
OTSubscriberKitNetworkStatsDelegate Estatísticas de vídeo/áudio, link de mídia estatísticas, condição da rede eventos

Específico para iOS: Conjunto networkStatsDelegate no assinante instância. Não há um registro separado para o “ouvinte de links de mídia” — implementar mediaLinkStatsUpdated e networkConditionChanged no mesmo tipo de delegado.

2. Limpar o estado quando a transmissão terminar

Redefinir o estado de observabilidade quando o fluxo for destruído:

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

Em subscriberDidConnect, atribua a visualização do assinante para o SwiftUI:

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

Próximo: Implementar os métodos delegados de estatísticas de rede e mesclar os dados para a sobreposição.