Swift

Crear el capturador de pantalla

El SDK de Vonage espera una capturadora de vídeo personalizada que se ajuste a OTVideoCapture. Crea un nuevo archivo ScreenCapturer.swift y ponerlo en práctica:

  1. Almacenar una referencia a la vista a capturar – aunque nuestra aplicación esté desarrollada en SwiftUI, la forma más sencilla de hacerlo es con UIView que pasaremos al Capturador, alternativamente esto se puede hacer con un UIViewRepresentable envoltura.
  2. Renderizar la vista periódicamente - uso drawHierarchy(in:afterScreenUpdates:).
  3. Convertir a CVPixelBuffer / OTVideoFrame – y pasar los fotogramas a videoCaptureConsumer.

Captura una vista

import Foundation
import UIKit
import OpenTok

class ScreenCapturer: NSObject, OTVideoCapture {
    var videoContentHint: OTVideoContentHint
    var videoCaptureConsumer: OTVideoCaptureConsumer?

    private let captureView: UIView
    private let captureQueue = DispatchQueue(label: "screen-capture")
    private var timer: DispatchSourceTimer
    private var capturing = false
    private var videoFrame: OTVideoFrame
    private var pixelBuffer: CVPixelBuffer?

    init(withView view: UIView) {
        self.videoContentHint = .none
        self.captureView = view
        self.timer = DispatchSource.makeTimerSource(flags: .strict, queue: captureQueue)
        self.videoFrame = OTVideoFrame(format: OTVideoFormat(argbWithWidth: 0, height: 0))
    }

    private func captureFrame() -> UIImage {
        UIGraphicsBeginImageContextWithOptions(captureView.bounds.size, false, 0)
        defer { UIGraphicsEndImageContext() }
        captureView.drawHierarchy(in: captureView.bounds, afterScreenUpdates: false)
        return UIGraphicsGetImageFromCurrentImageContext() ?? UIImage()
    }

    // Implement initCapture, start, stop, releaseCapture, isCaptureStarted, captureSettings
    // and feed frames to videoCaptureConsumer. See ScreenCapturer.swift for full implementation.
}

Copie el texto completo ScreenCapturer.swift implementación de este proyecto de ejemplo. Este se encarga de:

  • Captura con temporizador a ~10 fps
  • Redimensionamiento y relleno para compatibilidad con codificadores
  • CVPixelBuffer creación y OTVideoFrame entrega