Цель
Начальный этап и первый шаг включают создание функциональности захвата экрана для агента, позволяющей транслировать, транскодировать и передавать захваченный контент по сети.
Проект
Сначала мы создаём отдельный проект для изучения возможностей. Поскольку это агент, он будет работать на macOS как сервис или фоновый демон. Его основная задача проста — поскольку у него нет UI, мы реализуем его на Swift и Swift Package Manager как стандартный исполняемый файл.
Исходный код
Основная функция агента инициализирует сокет для каждого обнаруженного дисплея. Посмотрим, как эта функциональность будет работать.
func start() async throws {
let sender = NetworkSender(host: "127.0.0.1", port: port); sender.start(); self.network = sender
let content = try await SCShareableContent.current
guard let display = content.displays.first(where: { $0.displayID == displayID }) else { return }
let encoder = VideoEncoder(width: display.width, height: display.height, bitrate: 20_000_000)
encoder.delegate = self; self.encoder = encoder
let captureSession = ScreenCapture(displayID: displayID)
captureSession.delegate = self
self.capture = captureSession
try await captureSession.start()
}