这不是规划着可能出去旅游嘛,然后想起去年暑期我在大连旅游时突然连不上家里的所有设备,导致我急匆匆的中断旅行从大连赶了回来。
其实连不上家里的设备还好,最可怕的是我不知道家里发生了什么事。我让隔壁的美女邻居以及物业管家都来我家趴窗户看看,可惜挡着窗帘,什么都看不见。
不过好在她们来看过以后,证实我家里的设备并没有起火,这样就放心多啦。但是当时我就在想,如果家里有个摄像头就好了,我可随时监控家里发生了什么情况,就不用过于担心了。
可是暑期旅游回来后,我就一拖再拖,并没有把安装摄像头列上日程,而这次想出去旅游时,想起按摄像头,感觉有些太过于匆忙,毕竟摄像头还没选购,然后还有安装设置等诸多工作,想想就累。
于是我灵机一动,我不是有树莓派嘛,而且当时购买树莓派的时候,我还斥巨资购买了一个摄像头,但是一直懒惰,没用起来。
如果我用树莓派,结合摄像头,做一个网络监控产品,不就解决了我家没有监控摄像头的问题了嘛?还不用额外投资,简直不要更香。
使用树莓派摄像头实现简单的监控功能,听起来很复杂,实际上很简单。
首先,找出我珍藏已久的树莓派摄像头:
接下来,找出我珍藏已久的树莓派:
其实鼠标、键盘、HDMI线都不是必要的,只是我好久没用,忘记了账户、密码、IP之类的,登录试一下。
之后,把摄像头与树莓派连接好
虽然很多教程之类的,都告诉要在树莓派中先设置启用摄像头(sudo raspi-config),但是貌似我这不用启用就可以,可能是我装桌面版的OS,自动就启用了?
然后就可以使用摄像头启用监控功能了,需要说明的是,很多老旧的教程都会使用raspivid,而实际在新版系统中,已经使用libcamera以及相应的工具作为替代,你若是不清楚这点,还按老旧文档弄,可能就会要大费周章了。
我们可以使用如下指令生成视频流:
libcamera-vid -t 0 --inline --listen -o tcp://<ip-addr>:<port>
其中ip-addr以及port,要换成树莓派的相应IP以及端口,IP也可以直接使用0.0.0.0直接替代。
生成TCP视频流以后,我们可以在VLC播放器中播放,如果你的电脑中没有安装VLC播放器,可以到https://www.videolan.org/ 这个网站下载相应的软件。
安装好软件以后,使用media->Open network stream,并输入相应的地址,比如:
tcp/h264://192.168.1.86:8554
就可以在线查看视频了。
很多软件可能并不支持TCP视频流,使用诸如如下指令,可以将视频转换为RTSP协议流:
libcamera-vid -t 0 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264
然后在VLC播放器中输入如下地址,就可以播放视频流了:
rtsp://192.168.1.86:8554/stream1
现在我们已经解决了生成视频流以及局域网内访问的问题了。但是如果只能在局域网内访问,或者我只能我在家访问,就失去了监控的意义。毕竟我在家还要毛线监控呀?
所以接下来要解决的就是从外网访问的问题。
这里我使用的是DDNS结合端口转发来实现的,简单地说,通过DDNS获取家里路由器的IP,然后通过端口转发,访问到内网指定设备的指定端口。
这样就解决了外网访问的问题。
但是我实际使用中,RTSP的方式反而不能访问,只能用TCP的方式,算了,懒得深究了。
从下图中不难看出,想将摄像头固定好,会是一个难题。
我找来找去也没找到粗细适合的螺丝,于是我想了一个办法,用胶带将其固定在酒瓶上:
大概这是历史上最夸张的摄像头固定方法了,不过无所谓啦,能解决我的问题就好,夸张就夸张点吧。
其实关于摄像头,还有很多参数可以设置,这样就会得到更为优化的图像,不过对我而言,能用就行了,暂时就不考虑那么多啦。