Publicação de um fluxo na sessão
Quando o aplicativo se conectar à sessão do Vonage Video, queremos que ele transmita um fluxo de áudio e vídeo para a sessão, utilizando a câmera e o microfone do dispositivo:
- Adicione um
publisher&pubViewpropriedades 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)
}()
@Published var pubView: UIView? // this will be needed to display the UI later on
O OTPublisher A classe está definida no SDK do iOS. Ela utiliza a câmera e o microfone do dispositivo para transmitir uma sessão do Vonage Video.
- Modificar a implementação do
sessionDidConnect(_:)método para incluir código para publicar um stream na sessão:
func sessionDidConnect(_ session: OTSession) {
print("The client connected to the session.")
var error: OTError?
defer {
if let error {
print(error)
}
}
guard let publisher else {
return
}
session.publish(publisher, error: &error)
if let view = publisher.view {
DispatchQueue.main.async {
self.pubView = view
}
}
}
Quando o aplicativo se conecta a uma sessão, ele inicializa uma instância do OTPublisher, definido no SDK do iOS. O construtor recebe um parâmetro: o objeto que implementa o OTPublisherDelegate protocolo.
Em seguida, o código passa o OTPublisher objeto como parâmetro da função session.publish() método. Esse método transmite um fluxo de áudio e vídeo para a sessão, utilizando a câmera e o microfone do dispositivo iOS. (Observe que, no simulador do Xcode, o SDK do iOS utiliza um vídeo de teste ao transmitir um fluxo.)
O OTPublisher O objeto possui um view propriedade, que é uma UIView objeto. Essa visualização exibe o vídeo capturado pela câmera do dispositivo. Nas próximas etapas, exibiremos essa visualização no SwiftUI (no caso de UIKit É simples e pode ser feito com um addSubview(view) função)
- Em seguida, precisamos criar um wrapper em torno do UIView para poder usá-lo no ambiente do SwiftUI:
struct Wrap: UIViewRepresentable {
@State var view: UIView
func makeUIView(context: Context) -> UIView {
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
DispatchQueue.main.async {
self.view = uiView
}
}
}
- Agora vamos nos conectar
VonageVideoManagerpara oContentViewcomo uma propriedade, precisaremos dela para interagir com os dados. A solução é flexível e se adapta a qualquer arquitetura; portanto, se você estiver usando ViewModel, Interactors ou qualquer outra coisa em seu projeto, nós temos a solução ideal para você:
struct ContentView: View {
@ObservedObject var videoManager = VonageVideoManager()
}
- É hora de preencher o corpo da visualização; vamos usar nosso
Wrapa visualização que criamos anteriormente:
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)
}
.task {
videoManager.setup()
}
}
}
- Agora vamos implementar os métodos da
OTPublisherDelegateprotocolo. Esse protocolo inclui métodos para lidar com eventos relacionados ao editor. Adicione o código a seguir ao final doVonageVideoManager.swiftarquivo, após o colchete de fechamento doOTSessionDelegateextensão:
// MARK: - OTPublisherDelegate callbacks
extension VonageVideoManager: OTPublisherDelegate {
func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) {
print("The publisher failed: \(error)")
}
}
- Se o cliente não conseguir publicar na sessão, um
OTErroro objeto é passado para opublisher(_: didFailWithError:)método.
Faça a depuração do seu aplicativo. Se o aplicativo se conectar com sucesso à sessão, ele publicará um stream na sessão, e você verá o vídeo do emissor no aplicativo.
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.