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

时间:2017-10-11 22:27:19

标签: c# xamarin xamarin.forms xamarin.mac

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

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

1 个答案:

答案 0 :(得分:5)

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

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

将类级别引用存储到以下内容,并确保在控件超出范围时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();
}

enter image description here

注意:很多AVFoundation框架在iOS和MacOS之间共享,但是有一些差异所以如果您最终查看iOS示例代码,请注意您可能需要为macOS更改它。