赞
踩
背景介绍:
尝试用树莓派板实现远程视频监控,so在淘宝上入手一个树莓派摄像头,它是通过CSI接口连接到树莓派板上,之前我的树莓派使用的是CentOS系统,在网上找了很久,没有发现能在CentOS系统下的摄像头驱动(如果各位看客有相关资料或信息,欢迎联系本人),没办法重新刷了树莓派官方Debian系统,它自带树莓派摄像头的管理工具—raspistill。
为了实现树莓派+摄像头组合完成远程监控的目标,我们需要完成的任务包括:
1>. 视频流实时传输(本教程使用web端实现视频传输)
2>. 内网穿透(如果你有公网IP则可忽略此步骤)
如果你的树莓派只运行视频监控的端口服务,那么完成以上两个步骤就OK了。
如果你的树莓派还运行其它端口服务,如nginx,tomcat,pythonweb等等,你需要再多进行一项任务3:
3>. 树莓派端口代理转发,配置nginx.conf(本教程使用nginx为例)
淘宝卖家提供了一个相对简单的解决方案:下载一个master.zip的包在我们的树莓派上编译并运行它,就可以通过web浏览器方便的使用摄像头,运行效果如下图,可以看出使用了名为“MJPG-Streamer”的web开源项目:
这套解决方案包含了web前端的与后台服务端,我们能使用浏览器实时查看摄像头的视频/图像信息,但遗憾的是后台服务端没办法修改,所以不能进行如修改端口号的操作(这个系统设定端口号为8080)。
要想实现远程监控,你的树莓派必须有一个公网IP。什么是公网IP这里就不进行科普了,请自行百度。一般来说,我们现在的家庭网络是没有公网IP的,所以需要进行内网穿透的一个操作。实现内网穿透有很多方法,这里给推荐两种方法,一种简易流,一种技术流。
方法1: (简易流看这里↓↓↓)
推荐使用花生壳服务(不是打广告啊,只是个人使用推荐o(╥﹏╥)o)
① 首先你需要在树莓派上安装花生壳服务。
很赞的是,花生壳提供了树莓派版的花生壳程序,大家可参考官方教程安装。给出链接:
官方下载
官方教程
安装完成后你会看到类似如下输出:
请使用这个SN作为账号名登录“http://b.oray.com”,默认密码是“admin”
②登录以后:
a. 会赠送你一个免费的壳域名
b. 然后再花6块钱买一个内网穿透的试用服务(只能用一年),内网映射配置如下。
这种方法唯一的一个优点就是超级省心,特别适合小白以及不想折腾的People,缺点也很明显,试用版的内网穿透服务带宽只有1M,我自己在用的时候没办法流畅的查看视频监控。
应用名称和域名自己填,映射类型选择HTTP80,外网端口不能选,默认80(花钱可以改外网端口),内网主机填"127.0.0.1",内网端口填“8080”(请忽略图片上的80,为什么是8080请回看第一节描述),然后点击开启映射服务。到这里内网穿透就完成了。
确保以上操作都已顺利完成,你可以开始使用树莓派的远程监控服务了。
这里的图像是倒的是因为我摄像头就是倒过来的,各位看客不用担心自己需要倒立去看o(╯□╰)o
方法2: (技术流看这里↓↓↓)
看我之前的博客 内网穿透 - SSH反向代理 ,有不懂的可以给我留言。
另引用外链 frp内网穿透教程
首先声明,这里的介绍我就不像前面那样写的详细了,重点在于Nginx的配置。
如果你之前采用 frp内网穿透教程 配置内网穿透,而不是使用花生壳,那么你不会面临我下面描述的问题,但你仍然需要对Nginx进行配置,这是很有必要的。
这里解释一下为什么会需要对Nginx进行配置:在我的树莓派上还运行了很多端口服务,如Tomcat,Pyserver,MJPG-Streamer,甚至Nginx本身也占用端口,但是如果我们像前面步骤使用了花生壳免费穿透服务,外网访问端口固定为80端口,内网映射端口也设置为80,但此时内网中有端口号为8080的MPG-Streamer服务不能被外网访问,因为它没有被映射到外网,与此同时其他端口服务也是不能被访问的。这里我们可以利用Nginx对所有的端口服务进行一个代理转发。
重点是利用Nginx的proxy_pass变量参数:
proxy_pass http://localhost:8080/; # Nginx代理转发请求到 MJPG-Streamer 服务端的8080端口
在树莓派上安装Nginx,修改nginx.conf如下部分:
#设定虚拟主机配置 server { #侦听80端口 listen 80; # 主机域名 server_name xkxzw.iask.in localhost; #定义服务器的默认网站根目录位置 root /var/www/html/; #定义首页索引文件的名称 index index.php index.html index.htm; #设定本虚拟主机的访问日志 # access_log logs/nginx.access.log main; #默认请求 location / { # 代理转发请求到Nginx,我这里设置和内网 proxy_pass http://localhost:80/; #定义首页索引文件的名称 index index.php index.html index.htm; } location ^~ /camera/ { # 代理转发请求到 MJPG-Streamer 服务端,这里是重点 proxy_pass http://localhost:8080/; root /home/pi/mjpg-streamer-master/mjpg-streamer-experimental/www/; index index.html index.htm; } #设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file /etc/nginx/htpasswd; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { }
在配置nginx过程中踩了很多坑,大部分都可以参考如下:
Nginx常见错误及处理方法 https://www.cnblogs.com/liyongsan/p/6795851.html
Nginx配置auth_basic, auth_basic_user_file https://www.jianshu.com/p/1c0691c9ad3c
nginx的location配置详解 https://blog.csdn.net/tjcyjd/article/details/50897959#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。