可能是最通用的虚拟摄像头和虚拟麦克风
这两天北京又有点儿吃紧,核心地区的学校又停课了。那必然,如果说上课或者考试的话,肯定会有摄像头来监控你的行为——远程办公也是类似的吧?那有没有办法能让你逃过摄像头的监视呢?虚拟一下就可以了。这可能也是最通用的虚拟方法,任何软件都能使用。
一、原理
如何实现呢?回想一下我曾经说过的用手机做电脑摄像头:在使用时需要先通过命令加载一个v4l2模块,然后在使用摄像头的程序里边选择v4l2的源就可以了。对了,这个v4l2设备就是切入点。我只需要设置一个v4l2设备,然后在需要摄像头的软件里选择这个摄像头即可。那么这个摄像头显示的内容要从哪儿来呢?
再回想一下我曾经说过的与视频流相关的东西什么?对了,ffmpeg就可以做到这一点。ffmpeg是十分强大的一个工具,转码、录制直播、向直播间推流甚至是录屏,都可以通过ffmpeg来完成。所以将两者结合,即可打造一个虚拟的摄像头设备。
二、实现过程
接下来就看看如何实现。
- 安装v4l2loopback。直接安装
v4l2loopback-dkms
这个包就行了。注意啊,只支持Linux,MAC也许也可以? 查看当前的视频捕获设备,方便之后判断成功与否
- 通过命令
ls /dev/ | grep video
查看,或者文件管理器去往/dev/
浏览video
文件名的文件——所以你一定要明白,Linux用命令行更多的时候是因为方便,而不是离不开。 - 像我的笔记本,因为自带一个摄像头,所以我应该可以找到一个名为
video0
的文件,象征着存在一个视频捕获设备。如果有更多,则会有更多的文件出现在这里,反之你就找不到就对了。
- 通过命令
- 加载v4l2模块
sudo modprobe v4l2loopback
- 再查看刚刚的文件夹,你应该会发现多出来一个
video
开头的文件。这就意味着虚拟摄像头创建成功了。
现在,往摄像头中传入视频源,以便使用。
- 随便找一个视频备用
- 使用命令
ffmpeg -re -i '视频地址' -f v4l2 '刚刚新出现的video文件路径'
现在,使用任意一款使用到摄像头的软件,你会发现你会多出一个可选摄像头,选择之后显示出来的就是我们刚才使用的那段视频。
那么如何用来逃开远程监视就不必多说了吧?但是要明确一件事情啊,我只是在讨论技术,是你愿意把它拿去用在错误的地方了,这有任何问题可都不赖我。
三、虚拟麦克风
虽然用不到,但是音频和视频一般都是结伴出现的,所以既然有虚拟摄像头了,就附带着搞一个虚拟麦克风吧。不过,说是虚拟麦克风,实际上是新增了一块虚拟声卡,我们把音频流推到这个虚拟声卡上,就实现了虚拟麦克风的效果。
- 查看
/proc/asound/cards
这个文本文件。它记录了这个电脑上所有的声卡。记住这几个,方便一会儿查看新增的虚拟声卡。 - 加载虚拟声音回环模块——说人话就是加载虚拟声卡:
sudo modprobe snd-aloop
- 再查看文本文件,在最后应该新增了一项
Loopback
项,记住这个设备开头的数字。我这里是1
到此就说明虚拟声卡建立了。接下来尝试往这个声卡推送音频流。不过在真正使用之前,还需要找到这个虚拟声卡的设备号。
使用命令aplay -l
即可查看到设备号。记住第二个Loopback
行的device
后的数字。我这里是1。现在就可以真正的往虚拟声卡中推送音频流了。
使用命令ffmpeg -i '文件' -f alsa hw:1,1
其中,1,1分别对应刚刚要求记住的两个数字。
现在,使用任意一款使用到麦克风的软件,你会发现多出一个可选麦克风,选择之后就可以看到效果了。