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

net*_*t30 3 c# xamarin xamarin.mac xamarin.forms

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

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

Sus*_*ver 5

您将需要查看AVFoundationAPI(QTKit不建议使用).

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

将类级别引用存储到以下内容,Dispose并在控件超出范围时确保它们,否则会出现泄漏:

AVCaptureDevice device;
AVCaptureDeviceInput input;
AVCaptureStillImageOutput output;
AVCaptureSession session;
Run Code Online (Sandbox Code Playgroud)

在捕获设置中,假设您要使用内置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();
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注:很多的AVFoundation框架的iOS和MacOS之间共享的,但也有一些差异,所以如果你最终看的iOS示例代码注意您可能需要改变它为MacOS.