【发布时间】:2020-09-04 12:55:44
【问题描述】:
我正在编写一个 Swift 应用程序,它通过网络发送 iPhone 相机视频输入(帧),以便稍后在 macOS 应用程序上显示它们。
目前,我正在从AVCaputreSession 中获取视频帧,并从captureOutput 方法中获取PixelBuffer。
由于每一帧都很大(原始像素),我将CVPixelBuffer 转换为CGImage 和VTCreateCGImageFromCVPixelBuffer,然后再转换为UIImage JPEG 压缩(50%)。然后我通过网络发送该 JPEG 文件并将其显示在 Mac OS 应用程序上。
如您所见,这远非理想,在 iPhone 11 上运行速度约为 25 FPS。经过一些研究,我想出了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 应用程序上。有没有更好的方法来实现整个过程?也许我可以使用 iPhone 的 H264 硬件编码而不是将图像转换为 JPEG,但似乎不是那么简单(从我读到的内容看来 GPUImage 做了类似的事情)。
任何帮助表示赞赏,在此先感谢!
【问题讨论】:
标签: ios swift cocoa video-streaming gpuimage