есть ли API, чтобы проверить, используется ли микрофон или видеокамера Ma c? - PullRequest
0 голосов
/ 07 мая 2020

Да, я понимаю, что могу просто смотреть на зеленый свет, когда видеокамера включена. Дело не в этом.

Я бы хотел написать небольшую утилиту, которая уведомляет, когда используется mi c или видеокамера. Мне не интересно знать, какое приложение его использует. Я просто хочу знать, включена ли mi c / камера.

Это для меня как родителя. Я думал, что могу получить один из этих светодиодных индикаторов, меняющих цвет, а затем, когда камера / mi c включена, мое приложение могло бы обнаружить его, а затем отправить сигнал на свет, чтобы изменить цвет. Затем, когда один из моих детей входит, они увидят "красный" свет (то есть "не беспокоить") и поймут, что я участвую в конференц-связи.

1 Ответ

0 голосов
/ 08 июля 2020

Мне нужно решить почти ту же проблему. Это мой прототип решения. Он отслеживает количество потоков процесса AppleCamera. На тестовом MacBook базовое количество потоков кажется равным 3. Когда приложение использует камеру, количество увеличивается до 4. Я также планирую реализовать проверку микрофона. Я уверен, что мой код мог бы быть более компактным, и я мог бы преобразовать команды оболочки в однострочник, но я предпочитаю удобочитаемость.

import subprocess
import pywemo

DEVICE_NAME = "BatSignal"


def count_camera_threads():
    command = ["pgrep", "AppleCamera"]
    process = subprocess.run(command, capture_output=True, text=True)
    pid = process.stdout.replace("\n", "")
    command = ["ps", "M", pid]
    process = subprocess.run(command, capture_output=True, text=True)
    lines = process.stdout
    count = len(lines.splitlines()) - 2
    return count


def get_device(name):
    devices = pywemo.discover_devices()
    for device in devices:
        if device.name == name:
            return device
    return None


if __name__ == "__main__":
    device = get_device(DEVICE_NAME)
    if device is None:
        exit(f"Unable to find '{DEVICE_NAME}' on network")
    while True:
        if count_camera_threads() > 3:
            device.on()
        else:
            device.off()
        time.sleep(1)
...