Swift

Intégration avec Vonage Video Manager

Dans votre VonageVideoManager.swiftPour cela, il faut créer une instance du moteur de rendu personnalisé et l'affecter à l'éditeur :

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))
        }
    }
}

Points clés :

  • Créer une instance unique de CustomVideoRender (réutiliser, ne pas créer plusieurs instances)
  • L'attribuer à publisher.videoRender avant l'édition
  • Ajouter la vue du moteur de rendu comme sous-vue de la vue de l'éditeur
  • Utiliser un Wrap pour afficher UIView dans SwiftUI