Я пишу приложение Swift, которое отправляет по сети видеовход (кадры) с камеры iPhone, так что позже я могу отобразить их в приложении для MacOS.
В настоящее время я беру видео кадры изAVCaputreSession
, и получаю PixelBuffer
от captureOutput
метода.
Так как каждый кадр огромен (RAW пикселей) я преобразовываю CVPixelBuffer
его в a CGImage
с, VTCreateCGImageFromCVPixelBuffer
а затем в a UIImage
с JPEG сжатием (50%). Затем я отправляю, что JPEG по сети и отображать его на Mac OS app.
Как видите, это далеко не идеально и работает на скорости ~25 FPS на iPhone 11. После некоторых исследований я придумал GPU Image 2. Похоже, что я смог получить данные с камеры и применить что-то подобное (чтобы трансформация была выполнена на GPU):
camera = try Camera(sessionPreset:AVCaptureSessionPreset640x480)
let pictureOutput = PictureOutput()
pictureOutput.encodedImageFormat = .JPEG
pictureOutput.imageAvailableCallback = {image in
// Send the picture through the network here
}
camera --> pictureOutput
И я смогу передать этот UIImage и отобразить его в приложении для MacOS. Есть ли лучший способ реализовать весь этот процесс? Может быть, я мог бы использовать аппаратное кодирование H264 для iPhone вместо преобразования изображений в JPEG, но кажется, что это не так просто (и кажется, что GPUImage делает что-то подобное из того, что я прочитал).
Любая помощь приветствуется, заранее спасибо!