我想根据我的 MBP 上的相机使用情况来自动化个人工作流程。
基本上我想知道是否有任何相机(内置或 USB)已打开或关闭,因此我可以运行我将创建的程序或脚本。
我认为如果我需要轮询相机状态没关系,但基于事件或回调的解决方案将是理想的
我想根据我的 MBP 上的相机使用情况来自动化个人工作流程。
基本上我想知道是否有任何相机(内置或 USB)已打开或关闭,因此我可以运行我将创建的程序或脚本。
我认为如果我需要轮询相机状态没关系,但基于事件或回调的解决方案将是理想的
这似乎有效。
❯ 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
输出中的一些数字用 X 进行了编辑,因为我不知道它们的含义。:)
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"'
Filtering the log data using "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;
}
据我所知,您可以通过以下方式轮询相机的使用情况:
$ lsof -n | grep "AppleCamera"
或将“AppleCamera”更改为外部摄像头的驱动程序名称。其他可以尝试的相关名称是:“USBVDC”或“VDCAssistant”或“FaceTime”(或旧 Mac 中的“iSight”)。
您应该得到一行,其中包含使用网络摄像头的进程的名称和 pid,或者什么都没有,这意味着它没有被使用。
您可以检查所有关键字并确定相机正在使用中,如果这些关键字中的任何一个给您反馈的话。
-n
选项是跳过解析 IP 连接的 DNS 名称,这会大大加快命令速度。
作为旁注,我使用此应用程序来了解任何应用程序何时使用麦克风和/或网络摄像头:OverSight