一、背景介绍
虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用。当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了。关于如何在Windwos上实现一个虚拟设备的资料已经非常丰富了,Windows Driver Kit里面也有非常多的帮助文档。这篇博文主要总结了在Mac下开发虚拟摄像头的一些经验。Mac下的虚拟摄像头产品其实也有不少,例如CamTwist, CamMask, CamWiz, ManyCam等。但是关于如何在Mac下开发虚拟摄像头设备的资料却是异常匮乏。通过一番搜索后才找到一个关键字:CoreMediaIO. 经过了解,CoreMediaIO是Mac下的一个framework,主要用于对视频图像进行处理。而CoreMediaIO framework有一个Device Abstraction Layer(DAL),它类似与Mac下CoreAudio的Hardware Abstraction Layer(HAL)。HAL主要是用来处理音频硬件发送的音频流的,而DAL则是用来处理视频设备的视频流的。因此,利用DAL插件框架,可以模拟出一个摄像头设备供上层用户使用。
CoreMediaIO DAL有一个示例项目,这个项目模拟出了一个名为“Sample”的设备,通过底层kext模块提供的模拟数据实现视频帧的传递。这个DEMO要真正使用起来的话,有一些需要注意的地方。在Demo中的README文件中推荐使用如下命令安装预编译好的程序:
// Debug
sudo darwinup install {path to CoreMediaIO folder}/Prebuilts/Sample-Debug.tar.gz
// Release
sudo darwinup install {path to CoreMediaIO folder}/Prebuitls/Sample-Release.tar.gz
这样安装之后,并不能马上就能找到虚拟摄像头。一方面是因为kext提供的模拟数据超过800MB,加载到内存中需要一定的时间;另一方面是因为Prebuilts中的kext模块是未签名的。而OSX自从Mavericks开始要求kext模块必须经过签名,系统才会自动加载。否则的话需要关闭System Integirty Protection(SIP),手动加载Kext模块才能让Demo正常工作。

二、如何编译项目
在我们着手开发定制自己的虚拟摄像头之前,第一步就是要搞清楚Demo工程的组织结构。在Demo工程中包括两个文档,分别说明了DAL插件的工程结构、工作原理。这两个文档在开发之前应该要好好看看,对于了解整个代码结构和工作机制具有较大的帮助。另外,如何编译整个Demo工程也是个大问题。因为下

本文详述了在MacOS平台上利用CoreMediaIO框架开发虚拟摄像头的过程,包括理解CoreMediaIO Device Abstraction Layer (DAL),解决预编译Demo的加载和签名问题,编译项目,修改插件模块和内核模块,以及打包和安装注意事项。通过修改分辨率、颜色模式和设备信息,创建自定义的虚拟摄像头。
最低0.47元/天 解锁文章
4268

被折叠的 条评论
为什么被折叠?



