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:
- Adicione um
subscriber&subViewpropriedades para oVonageVideoManagerclasse:
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.
- Modificar a implementação do
session(_: streamCreated)método (um dosOTSessionDelegatecallbacks) 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.
- A seguir, vamos implementar os métodos da
OTSubscriberDelegateprotocolo. Esse protocolo inclui métodos para lidar com eventos relacionados ao assinante. Adicione o código a seguir ao final doVonageVideoManager.swiftarquivo, após o colchete de fechamento doOTPublisherDelegateextensã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.
- 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.