在 Visual Studio 上使用 C# 和 Xamarin.Mac 表单访问 MacBook 相机?

Access MacBook camera using C# and Xamarin.Mac forms on Visual Studio?

我需要使用 Xamarin.Mac 表单集成来自我的 Macbook 相机的视频流。但是,我找到的所有文档只告诉您如何在 iOS 和 Android 平台上执行此操作。

那么您将如何从 Macbook 获取视频流?我应该看哪些图书馆?

您需要查看 AVFoundation API(QTKit 已弃用)。

您可以基于 NSView 创建自定义 Xamarin.Forms 视图渲染器,并将 AVCaptureVideoPreviewLayer 指定为控件的图层,以将相机输出流式传输到此控件。

存储对以下的 class 级引用,并确保在您的控件超出范围时 Dispose 它们,否则会出现泄漏:

AVCaptureDevice device;
AVCaptureDeviceInput input;
AVCaptureStillImageOutput output;
AVCaptureSession session;

在您的捕捉设置中,假设您想要使用内置的 FaceTime 摄像头(也称为 iSight),您可以获取默认的 AV 设备。

macOS/Forms 示例:

device = AVCaptureDevice.GetDefaultDevice(AVMediaTypes.Video);
input = AVCaptureDeviceInput.FromDevice(device, out var error);
if (error == null)
{
    session = new AVCaptureSession();
    session.AddInput(input);
    session.SessionPreset = AVCaptureSession.PresetPhoto;
    var previewLayer = AVCaptureVideoPreviewLayer.FromSession(session);
    previewLayer.Frame = Control.Bounds;
    Control.Layer = previewLayer;
    output = new AVCaptureStillImageOutput();
    session.AddOutput(output);
    session.StartRunning();
}

注意:许多 AVFoundation 框架在 iOS 和 MacOS 之间共享,但存在一些差异,所以如果您最终查看 iOS 示例代码,请注意您可能需要针对 macOS 进行更改。