所需工具:一个具有公网ip的云服务器、树莓派、cis摄像头、nginx服务器、mjpg-stream插件

1.搭建nginx服务器
树莓派和云服务器都要安装

sudo apt-get install nginx

2.树莓派配置开启csi服务
参考博客:链接
打开树莓派终端

sudo raspi-config  #调出树莓派配置控制台

按照步骤开启你的csi摄像头

测试树莓派摄像头是否可以正常使用

raspistill -v -o test.jpg   #拍摄一张图片 至于raspistill的传输可以使用help查看

这里可能会出现端口冲突问题,默认选择的端口是8080.打不开的话可以查看端口号情况

 pip install whatportis  #安装端口号查看工具  whatportis ssh  #查看某个服务使用的端口号 # 也可以 netstat -an |grep 8080#查看8080端口使用情况 #然后kill掉占用的端口号再开启我们的服务避免端口冲突

3.配置mjpg-stream服务
参考:

当然排除端口号冲突问题,因为web使用的端口号是8080.这里我们可以打开mjpg-stream的配置文件 start.sh配置新的端口号,避免端口冲突问题
4.使用mjpg-stream服务将树莓派摄像头实时画面在网页端查看

http://localhost:8080/stream.htmlhttp://<devIP>:8080/stream.htmlhttp://<树莓派IP地址>:8080/javascript.html

选择一个在浏览器中打开就可以看到实时画面。
这里我们会发现打开的网页视频超级卡,这是没有配置mjpg-stream的结果,可以配置一下每秒读取的帧数。
这里打不开的实时监控的情况下,一般是我们没开motion,这里可以再配置一下motion,可以支持摄像头热插拔。

5.使用nginx服务将树莓派内网ip反向代理到公网服务器【这步可以不要】

6.使用frp技术将树莓派内网摄像头服务器转换成web服务
frp官网学习:链接
树莓派端配置
/etc/nginx/conf.d配置文件中创建frpc.conf文件

server{listen 8080;#服务器使用的端口server_name localhost #这里一般填写域名,当然也可以是公网iplocation /{proxy_pass http://localhost:8181;#将内网服务转接成端口8181的web服务}}

frpc.ini文件代码

[common]server_addr = x.x.x.x #公网ipserver_port = 7000#和frps服务端相连的端口,需要和服务端那边绑定的端口一致[web]type =httplocal_port =8181 #内网机器开放的服务端口custom_domains =x.x.x.x #这里最好是域名,公网ip也可以

服务器端配置
创建一个frps.conf

server{listen 8080;#服务器使用的端口server_name x.x.x.x #公网iplocation / {client_max_body_size 1000m;#假设frps端口8080proxy_pass http://127.0.0.1:8181;#内网开发的端口proxy_redirect off;#重定向关闭proxy_set_heard X-Real-IP $remote_addr;proxy_set_heard X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_heard Host $http_host;proxy_set_heard X-NginX-Proxy true;}}

frps.ini

[common]bind_port =7000;#frps和frpc相连端口vhost_http_port = 8181 #vhost_http_port 用于接收http请求

7.启动客户端和服务端的frp即可实现公网ip访问内网搭建的服务

./frps -c ./frps/ini #启动服务端./frpc -c ./frpc.ini #启动客户端#如果需要长期使用要结合其他工具,比如systemd和supervisor

8.云服务器开放所需要的端口@TOC
这里就不写那么详细了,直接网上一搜就有,
当然也可以参考这篇:传送门

9.微信小程序端获取实时视频

<view class="bj">    <view class="container">        <text class="bt">实时视频监控</text>        <image class="photo" src="http://云服务器地址:使用的端口/?action=stream" mode="aspectFit"></image>    </view></view>

资源:Androidapp实现视频推流:https://github.com/tancolin/App4Mjpg-streamer.git