Swift

Integration mit Vonage Video Manager

In Ihrem VonageVideoManager.swiftErstellen Sie eine Instanz des benutzerdefinierten Renderers und weisen Sie sie dem Herausgeber zu:

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

Wichtige Punkte:

  • Erstellen Sie eine einzelne Instanz von CustomVideoRender (wiederverwenden, nicht mehrere Instanzen erstellen)
  • Weisen Sie es zu publisher.videoRender vor Veröffentlichung
  • Hinzufügen der Ansicht des Renderers als Unteransicht der Ansicht des Herausgebers
  • Verwenden Sie eine Wrap Hilfsprogramm zur Anzeige UIView in SwiftUI