Swift

Integrar com o Vonage Video Manager

No seu VonageVideoManager.swift, crie uma instância do renderizador personalizado e atribua-a ao publisher:

import OpenTok
import SwiftUI

final class VonageVideoManager: NSObject, ObservableObject {
    let kAppId = "YOUR_APP_ID"
    let kSessionId = "YOUR_SESSION_ID"
    let kToken = "YOUR_TOKEN"
    
    // Create the custom renderer instance
    let renderer = CustomVideoRender()
    
    private lazy var publisher: OTPublisher? = {
        let settings = OTPublisherSettings()
        settings.name = UIDevice.current.name
        return OTPublisher(delegate: self, settings: settings)
    }()
    
    @Published var pubView: AnyView?
    
    private func doPublish() {
        var error: OTError?
        defer {
            processError(error)
        }
        
        // Assign the custom renderer to the publisher
        guard let publisher else { return }
        publisher.videoRender = renderer
        session?.publish(publisher, error: &error)
        
        // Setup view hierarchy
        guard let pubView = publisher.view else { return }
        
        pubView.frame = CGRect(x: 0, y: 0, width: 250, height: 250)
        renderer.view.frame = CGRect(x: 0, y: 0, width: 250, height: 250)
        pubView.addSubview(renderer.view)
        
        // Wrap UIView for SwiftUI
        DispatchQueue.main.async {
            self.pubView = AnyView(Wrap(pubView))
        }
    }
}

Pontos-chave:

  • Crie uma única instância de CustomVideoRender (reutilize-o, não crie várias instâncias)
  • Atribua a publisher.videoRender antes publicação
  • Adicione a visualização do renderizador como uma subvisualização da visualização do editor
  • Use um Wrap função auxiliar para exibir UIView no SwiftUI