Swift

Visão geral

Mostrar as métricas de observabilidade combinadas na parte superior da interface de usuário da chamada, para que você possa ver dados de qualidade em tempo real durante uma sessão. Com base no que você observar, é possível adicionar limites posteriormente (por exemplo, exibir uma mensagem de conexão ruim quando networkDegradationSource é .local).

Exibir estatísticas na interface do usuário

Use um pequeno ObservabilityStats modelo no seu projeto para armazenar campos de sobreposição (largura de banda, perda de pacotes, fonte da degradação, rótulos de condição da rede).

1. Visualizações do editor e do assinante do host

Reutilize um UIViewRepresentable wrapper (como no Básicos do chat por vídeo (Swift) (tutorial) para incorporar OTPublisher e OTSubscriber visualizações no SwiftUI:

struct VideoCallView: View {
    @ObservedObject var videoManager: VonageVideoManager

    var body: some View {
        ZStack {
            VStack {
                if let pubView = videoManager.pubView {
                    Wrap(view: pubView)
                        .frame(height: 200)
                }
                if let subView = videoManager.subView {
                    Wrap(view: subView)
                        .frame(maxHeight: .infinity)
                }
            }

            if let stats = videoManager.latestObservabilityStats {
                StatsOverlay(stats: stats)
            }
        }
    }
}

2. Sobreposição de estatísticas

struct StatsOverlay: View {
    let stats: ObservabilityStats

    var body: some View {
        VStack(alignment: .leading, spacing: 4) {
            Text("Observability")
                .font(.headline)
            Text(stats.summaryLines.joined(separator: "\n"))
                .font(.system(.caption, design: .monospaced))
        }
        .padding(12)
        .background(.black.opacity(0.6))
        .foregroundColor(.white)
        .cornerRadius(8)
        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
        .padding()
    }
}

Fio @Published var latestObservabilityStats em VonageVideoManager Portanto, o SwiftUI é atualizado quando as chamadas de retorno dos delegados atualizam o estado na fila principal.

3. Ciclo de vida de um aplicativo para iOS

Específico para iOS: Ao contrário do SDK do Android, session.onPause() / onResume(), os aplicativos para iOS geralmente dependem de ScenePhase, interrupções na sessão de áudio e sua própria política ao colocar o aplicativo em segundo plano durante uma chamada. Se o aplicativo for colocado em segundo plano, as estatísticas podem ser pausadas ou interrompidas até que a sessão volte a ficar ativa — faça o teste em um dispositivo físico para obter um comportamento realista da rede.

Próximo: Execute o programa com um segundo participante e verifique se as atualizações da sobreposição foram feitas.