7

I try to implement the virtual camera using CoreMediaIO DAL plugin, the virtual device won't show up in Mojave with Photo Booth and other application, is CoreMediaIO plugin method deprecated in Mojave? what is the replacement?

The virtual camera I created is basically based on https://developer.apple.com/library/archive/samplecode/CoreMediaIO and some samples in github.

I expected when I open the Photo Booth application, the virtual device would show on the Camera list, but it is not. (Mojave)

Steven
  • 468
  • 4
  • 14
  • One thing I found is that Mojave has its own AppleCamera.plugin in the CoreMediaIO DAL plugin folder, if I move this file to other place, that camera will not work, looks like it is still using CoreMediaIO DAL for the camera. not sure if it is only support physical camera, not very likely, in that case, there might be some update on the technology, I tried the sample came with the SDK and it doesn't work either. – Steven May 15 '19 at 21:17
  • One more comment is that, the explained document says the DAL device must have a user-level DAL plugin, that means the kext and assistant are optional, anyone made pure DAL plugin w/o kext/ass worked? – Steven May 16 '19 at 15:23
  • If I don't want the DPA, how do we get rid of it? it is everywhere in the DP, any Apple guys could drop a light? – Steven May 16 '19 at 21:47

1 Answers1

5

It turns out I misunderstood input/output stream since I was from DirectShow world, kept the input stream only, ripped off all assistant, kext related, leave pure DAL plugin only, hooked with my transportation layer of frame data, now WebRTC, Zoom etc can find and use it under Mojave.

Steven
  • 468
  • 4
  • 14
  • 3
    Hi Steven, I'm about to attempt something just like this. Any possibility you're able to share what you've done so far? I'll try and recreate the wheel if needed but it sounds like this was a bit of a nightmare to get where you're at. – Dustin Nielson Mar 12 '20 at 02:46
  • Please add more detail how you did this, I'm in the same boat – aendra Apr 01 '20 at 15:50
  • Thanks for sharing the hints. Do you think this is going to work in the next releases of macOS. I'm doing research in this area now and it's still unclear to me. kext is already deprecated but accordingly to your answer it was not needed. I'm not sure what's the status of CoreMediaIO as it seems Apple doesn't maintain it's example from 2012 anymore and also I can not find any references to for example to CMIOObjectCreate when searching in current documentation. Is this suppose to be somehow covered by IOSurface or DriverKit/SystemExtension? Thank you for any clues. – tsr Apr 08 '20 at 14:46
  • if you get your plugin certified by apple, all applications can load it (including those third-party hardened enabled applications) otherwise, only non-hardened applications can use it. I mean 10.15, 10.16, not sure 10.17 yet – Steven Apr 09 '20 at 15:08
  • Hi Steven, is there any code you can share? I’m trying to achieve the same without luck. Documentation is also a mess. Thanks! – jpbalarini Apr 12 '20 at 15:41
  • My code is bound with whole project which my boss won't allow me to share, anyway, for the DAL plugin part, it is pretty much similar to Apple's sample code https://developer.apple.com/library/archive/samplecode/CoreMediaIO/Introduction/Intro.html – Steven Apr 13 '20 at 16:28
  • I am currently trying to understand how the DAL plugin works for developing my own plugin. What is the purpose of this "Assistant" thing? I can see that all virtual webcam drivers have it in their ``Resources`` plugin directory. From the source code it looks as if the Assistant is just a kind of server for the plugin itself. But from my understanding the plugin could handle all image data alone? Or has the plugin restrictions (e.g. no network access) which can only be run by the assistant? – Hyndrix May 07 '20 at 09:03
  • @Steven: https://developer.apple.com/forums/thread/131826 You said all applications can use it. Have you tested your plugin certified by apple against Microsoft Teams Version 1.3.00.23764. Please let me know. Thanks! – user2801184 Sep 14 '20 at 23:30
  • I guess it is not the same any more, used to be working with all applications, but new version Teams/Slack/RingCentral Meeting etc blocked it, we need persuade them by raising ticket to enable it – Steven Sep 16 '20 at 18:16