Swift

Inscrever-se nos feeds de outros clientes

Por fim, queremos que os clientes possam inscrever-se para (ou visualizar) as transmissões de outros clientes na sessão:

  1. Adicione um subscriber & subView propriedades para o VonageVideoManager classe:
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?

O OTSubscriber A classe está definida no SDK do iOS. Ela utiliza a câmera e o microfone do dispositivo para se inscrever em uma sessão de streaming do Vonage Video.

  1. Modificar a implementação do session(_: streamCreated) método (um dos OTSessionDelegate callbacks) para incluir código que permita assinar os fluxos de outros clientes na sessão:
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)
}

Quando outro cliente publica um fluxo em uma sessão, esse método é chamado, e um OTStream o objeto é passado. O OTStream A classe é definida no SDK do iOS e representa um fluxo de áudio e vídeo na sessão. O código inicializa uma instância da OTSubscriber classe, definida no SDK do iOS. A OTSubscriber() O construtor recebe dois parâmetros: O OTStream objeto (correspondente ao fluxo que você deseja visualizar) e o objeto que implementa o OTSubscriberDelegate protocolo.

  1. A seguir, vamos implementar os métodos da OTSubscriberDelegate protocolo. Esse protocolo inclui métodos para lidar com eventos relacionados ao assinante. Adicione o código a seguir ao final do VonageVideoManager.swift arquivo, após o colchete de fechamento do OTPublisherDelegate extensão:
// 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)")
    }
}
  • Quando o cliente se conecta à sessão, o subscriberDidConnect(_:) o método é chamado.
  • Se o cliente não conseguir se conectar à sessão, um objeto OTError é passado para o subscriber(_: didFailWithError:) método.
  1. Por fim, atualize o código da interface do usuário para incluir também a visualização do assinante:
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()
        }
    }
}

Bate-papo por vídeo básico

Aprenda os conceitos básicos da plataforma Vonage Video API, incluindo como os usuários podem se comunicar por vídeo, voz e mensagens. Explore um fluxo básico da Vonage Video API.

Etapas
1
Introdução
2
Introdução
3
Criando um novo projeto
4
Adicionando a Biblioteca de Vídeos da Vonage
5
Configurando a autenticação
6
Conectando-se à sessão
7
Publicação de um fluxo na sessão
8
Inscrever-se nos feeds de outros clientes
9
Executando o aplicativo
10
Conclusão