MacOS - 检测相机何时打开/关闭

ser*_*ira 11 peripherals macos camera automation

我想根据 MBP 上的相机使用情况自动化个人工作流程。

基本上我想知道是否有任何相机(内置或 USB)已打开或关闭,以便我可以运行我将创建的程序或脚本。

我认为如果我需要轮询相机状态也可以,但基于事件或回调的解决方案将是理想的

Pat*_*ney 13

这似乎有效。

?  log stream | grep "Post event kCameraStream"
2020-12-01 14:58:53.137796-0500 0xXXXXXX   Default     0x0                  XXX    0    VDCAssistant: [com.apple.VDCAssistant:device] [guid:0xXXXXXXXXXXXXXXXX] Post event kCameraStreamStart
2020-12-01 14:58:56.431147-0500 0xXXXXXX   Default     0x0                  XXX    0    VDCAssistant: [com.apple.VDCAssistant:device] [guid:0xXXXXXXXXXXXXXXXX] Post event kCameraStreamStop
2020-12-01 14:58:56.668970-0500 0xXXXXXX   Default     0x0                  XXX    0    VDCAssistant: [com.apple.VDCAssistant:device] [guid:0xXXXXXXXXXXXXXXXX] Post event kCameraStreamStart
Run Code Online (Sandbox Code Playgroud)

输出中的一些数字用 X 进行了编辑,因为我不知道它们的含义。:)

  • 这也适用于我的机器。好工作!如果你用它开发了一些很酷的东西,请告诉我! (3认同)
  • 这在蒙特利似乎行不通,fwiw。 (2认同)

neu*_*242 10

大苏尔

log stream --predicate 'eventMessage contains "Post event kCameraStream"'仅适用于 macOS Big Sur

蒙特雷

在 macOS Monterey 上,您必须使用稍微不同的谓词:

$ log stream --predicate 'subsystem contains "com.apple.UVCExtension" and composedMessage contains "Post PowerLog"'

Timestamp                       Thread     Type        Activity             PID    TTL  
2021-10-27 12:21:13.366628+0200 0x147c5    Default     0x0                  353    0    UVCAssistant: (UVCExtension) [com.apple.UVCExtension:device] UVCExtensionDevice:0x1234005d7 [0x7fe3ce008ca0] Post PowerLog {
    "VDCAssistant_Device_GUID" = "00000000-1432-0000-1234-000022470000";
    "VDCAssistant_Power_State" = On;
}
2021-10-27 12:21:16.946379+0200 0x13dac    Default     0x0                  353    0    UVCAssistant: (UVCExtension) [com.apple.UVCExtension:device] UVCExtensionDevice:0x1234005d7 [0x7fe3ce008ca0] Post PowerLog {
    "VDCAssistant_Device_GUID" = "00000000-1432-0000-1234-000022470000";
    "VDCAssistant_Power_State" = Off;
}
Run Code Online (Sandbox Code Playgroud)

文图拉

在这里您可以使用log stream --predicate 'eventMessage contains "Cameras changed to"',它甚至可以为您提供活动摄像机的列表:

Timestamp                       Thread     Type        Activity             PID    TTL  
2023-03-20 14:07:56.340362+0100 0x21ee     Default     0x0                  1144   0    ControlCenter: [com.apple.controlcenter:video-effects] Cameras changed to [ControlCenterApp.VideoCamera(id: "FOO-0176-46F7-B185-BAR", name: "FaceTime HD-kamera", utType: Optional(<UTType 0xFOO1c41BAR> com.apple.macbookpro-16-2023 (not dynamic, declared)), batteryInfo: nil, deskViewID: nil, supportedEffects: [portrait], appEffects: [ControlCenterApp.AppVideoEffects(bundleIDs: Set(["com.apple.PhotoBooth"]), bundleNames: ["com.apple.PhotoBooth": "Photo Booth"], enabledEffects: Set([]), unavailableEffects: Set([]))])]
2023-03-20 14:08:09.114873+0100 0x21ee     Default     0x0                  1144   0    ControlCenter: [com.apple.controlcenter:video-effects] Cameras changed to []
Run Code Online (Sandbox Code Playgroud)