Je souhaite écrire mes propres filtres de caméra pour le chat vidéo, et idéalement les appliquer dans toutes les applications de chat vidéo populaires (Zoom, Hangouts, Skype, etc.). La façon dont j'imagine ce fonctionnement consiste à écrire une application macOS qui lit le flux de la caméra, applique mes filtres et expose une caméra virtuelle supplémentaire. Cette caméra virtuelle pourrait alors être sélectionnée dans n'importe quelle application de chat vidéo.
J'ai passé de nombreuses heures à chercher comment faire cela et je ne sais toujours pas si c'est même possible avec les API macOS modernes. Il y a quelques questions similaires sur StackOverflow (par exemple ici , ici ), mais elles sont soit sans réponse, soit très anciennes. J'espère que cette question recueillera des conseils/des liens/des idées dans la bonne direction pour savoir comment faire cela à partir de 2020.
Voici ce que j'ai jusqu'à présent:
Il existe un outil populaire dans la communauté de diffusion en direct appelé OBS Studio. Il capture les entrées de différentes sources (appareil photo, bureau, etc.), dispose d'un système de plugins pour appliquer des effets, puis diffuse la sortie vers des services populaires (par exemple Twitch). Cependant, il n'existe aucune fonctionnalité permettant d'exposer le flux en tant que caméra virtuelle sur macOS. Dans les discussions à ce sujet ( thread , thread ), les gens parlent d'un outil appelé Siphon et d'un outil appelé CamTwist.
Malheureusement, Siphon n'expose pas de caméra virtuelle plus : "SyphonInject NE FONCTIONNE PLUS SOUS macOS 10.14 (Mojave). Apple a fermé la faille qui permet des ajouts de scripts dans répertoires globaux à charger dans n'importe quel processus. Essayer d'injecter dans n'importe quel processus échouera silencieusement. Cela fonctionnera si SIP est désactivé, mais c'est une mauvaise idée et je ne vais pas suggérer ou aider n'importe qui fait ça. "
Heureusement, CamTwist fonctionne. Je l'ai fait fonctionner sur mon macOS Catalina, j'ai appliqué certains de ses effets intégrés sur mon flux de caméra et je l'ai vu apparaître comme une nouvelle caméra dans mes paramètres de Hangouts (après redémarrage Chrome). C'était encourageant.
Malheureusement, CamTwist est plutôt vieux et mal entretenu. Il utilise Quartz Composer pour implémenter des effets, mais Quartz Composer was deprecated by Apple and il vit probablement ses derniers jours à Catalina.
Le SDK macOS avait une API appelée CoreMediaIO , qui aurait pu être le moyen d'exposer une caméra virtuelle, mais cette API était également obsolète. C'est pas clair si/quelle est une alternative moderne.
Je suppose qu'une autre façon de poser toute cette question est la suivante: comment CamTwist est-il implémenté, comment se fait-il qu'il fonctionne toujours dans macOS Catalina et comment implémenteriez-vous la même chose en 2020?
Tout ce qui éclairerait tout cela serait très apprécié!
Je souhaite également créer mon propre filtre de caméra comme Snap Camera. J'ai donc fait des recherches sur CoreMediaIO et Siphon. Avez-vous vérifié ce projet Github? https://github.com/lvsti/CoreMediaIO-DAL-Example
Ce référentiel a commencé comme un fork de l'exemple de code officiel CoreMediaIO d'Apple. Vous savez, le code d'origine n'a pas bien vieilli depuis sa dernière mise à jour en 2012. Le propriétaire du référentiel a donc changé pour le faire compiler sur les systèmes modernes.
Et vous pouvez savoir que le code fonctionne dans macOS 10.14 (Mojave) pour voir le problème suivant. https://github.com/lvsti/CoreMediaIO-DAL-Example/issues/4
En fait, je n'ai pas encore créé le filtre de la caméra car je ne sais pas comment envoyer des images à une caméra virtuelle construite par CoreMediaIO. J'aimerais en savoir plus. Si vous savez, dites-le moi.
CamTwist utilise CoreMedioIO. Qu'est-ce qui vous fait penser que c'est obsolète? En regardant les en-têtes du SDK 10.15, je ne vois aucune indication qu'il est obsolète. Il y a eu des mises à jour aussi récemment que 10.14.