在 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 进行更改。
我需要使用 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 进行更改。