====== Virtual Camera ====== ===== Tips ===== * 为何云桌面需要虚拟摄像头?为何不用USB重定向摄像头?在远程桌面控制中,甚至是在云桌面应用中。 因为大部分都是USB的摄像头,似乎可以直接使用USB远程访问的方式,把USB摄像头的图像数据直接重定向到服务端。 然而,USB重定向传输的是USB通讯协议数据,摄像头的图像数据包含在USB通讯协议中, 这个USB通讯协议是不能做有损压缩的,图像数据本身就非常庞大,这种方式浪费的网络带宽非常高。 曾经做过实验,传输640X480大小的YUY2格式的摄像头图像数据,大致30FPS,没对USB通讯协议做压缩, 传输大约是 5Mbytes 每秒,基本上占了百兆网卡一半的带宽,而且还只是传输 640X480这种小分辨率的图像, 如果是1920P这种图像,那更加恐怖,即使做无损压缩,使用LZMA这种高强度压缩,对图像数据来说,基本上也压缩不到多少。 ===== 调研 ===== * DirectShow 实现虚拟摄像头方式:https://github.com/roman380/tmhare.mvps.org-vcam * DirectShow Baseclasses[[https://github.com/Microsoft/Windows-classic-samples/tree/master/Samples/Win7Samples/multimedia/directshow/baseclasses| example code]] * AVStream 驱动方式:https://www.pianshen.com/article/44661054887/, https://www.daimajiaoliu.com/daima/4edb067b8100407 * [[https://docs.microsoft.com/en-us/windows-hardware/drivers/samples/avstream-driver-samples|avstream-driver-samples]] * [[https://github.com/robot9706/VirtualCameraDriver|github 上的一个实现参考]] * 相关文章 * http://alax.info/blog/1722 * https://blog.csdn.net/fanxiushu/article/details/79830750 * 调研总结: {{ :public:it:windows:windows_virtual_camera.png |}} {{ :public:it:windows:windows虚拟摄像头调研v1.0.2.png |}}