Publicación de un flujo en la sesión
Cuando la aplicación se conecta a la sesión de Vonage Video, queremos que publique una transmisión de audio y video en la sesión, utilizando la cámara y el micrófono del dispositivo:
- Añade un
publisher&pubViewpropiedades alVonageVideoManagerclase.
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
El OTPublisher La clase está definida en el SDK de iOS. Utiliza la cámara y el micrófono del dispositivo para publicar una sesión de Vonage Video en directo.
- Modificar la aplicación del
sessionDidConnect(_:)Método para incluir código que permita publicar un flujo en la sesión:
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
}
}
}
Cuando la aplicación se conecta a una sesión, inicializa una instancia de la OTPublisherdefinido en el SDK de iOS. El constructor recibe un parámetro: el objeto que implementa la función OTPublisherDelegate protocolo.
A continuación, el código pasa el OTPublisher como parámetro del session.publish() método. Este método publica un flujo de audio-vídeo en la sesión, utilizando la cámara y el micrófono del dispositivo iOS. (Tenga en cuenta que en el simulador de Xcode, el SDK de iOS utiliza un vídeo de prueba al publicar una secuencia).
El OTPublisher tiene un objeto view que es una propiedad UIView objeto. Esta vista muestra el vídeo capturado desde la cámara del dispositivo. En los próximos pasos vamos a mostrar esta vista en SwiftUI (en caso de UIKit es sencillo y se puede hacer con un addSubview(view) función)
- A continuación, tenemos que crear un envoltorio para UIView que nos permita utilizarlo en el entorno de 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
}
}
}
- Ahora vamos a conectar
VonageVideoManagera laContentViewcomo propiedad, la necesitaremos para interactuar con los datos. La solución es flexible y se adapta a cualquier arquitectura, así que si estás usando ViewModel, Interactors o cualquier otra cosa en tu proyecto - te tenemos cubierto:
struct ContentView: View {
@ObservedObject var videoManager = VonageVideoManager()
}
- Es hora de rellenar el cuerpo de la vista, utilizaremos nuestro método
Wrapla vista que hemos creado 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()
}
}
}
- Ahora vamos a implementar los métodos de la
OTPublisherDelegateprotocolo. Este protocolo incluye métodos para gestionar eventos relacionados con el editor. Añade el siguiente código al final delVonageVideoManager.swiftdespués del corchete de cierre del archivoOTSessionDelegateextensión:
// MARK: - OTPublisherDelegate callbacks
extension VonageVideoManager: OTPublisherDelegate {
func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) {
print("The publisher failed: \(error)")
}
}
- Si el cliente no consigue publicar en la sesión, un
OTErrorel objeto se pasa alpublisher(_: didFailWithError:)método.
Depura tu aplicación. Si la aplicación se conecta correctamente a la sesión, publicará una transmisión en la sesión y podrás ver el vídeo del emisor en la aplicación.
Videochat básico
Aprende los conceptos básicos de la plataforma Vonage Video API, incluyendo cómo los usuarios pueden comunicarse a través de vídeo, voz y mensajería. Explora un flujo básico de la Video API de Vonage.