用树莓派搭建远程实时画面传输

2023-11-08

目录

一、材料准备

二、环境搭建

1.树莓派实现局域网监控画面传输

1、树莓派安装系统

2、将摄像头与树莓派连接

3、配置树莓派开发环境

4、让摄像头开始进行画面录制

5、将监控画面服务设置为开机自启

2、内网渗透

1、服务器端frp配置

2、将服务器端FRP设置为自动启动

3、配置宝塔面板

 4、客户端FRP配置(树莓派)

5、客户端FRP自动启动

三、安装4g模块

1、将4G模块与USB转接版接好,然后与树莓派相连接。

2、检测硬件连接,网络连接

3、进行拨号设置

4、开机自动拨号 

四、总结



一、材料准备

设备 数量
树莓派4B 1
树莓派摄像头(csi接口) 1
摄像头csi连接线 1
MicroHDMI连接线 1
网线(可以不需要) 1
Linux服务器 1
4G模块(华为me909s-821)+usb转接板 1

二、环境搭建

1.树莓派实现局域网监控画面传输

1、树莓派安装系统

本人下载的是树莓派官方深度定制的硬件驱动与软件程序,官方推荐系统——Raspberry Pi OS(Raspbian)系统下载链接

如果是第一次接触LInux系统的话,这里我推荐下载桌面版,方便小白进行调试。linux老手的话可以直接下载lite版,这样可以让树莓派减少一些资源的使用。

关于如何将系统下载进树莓派中,可以参考我的另一篇文章Windowns下安装树莓派系统到SD卡,以及远程登录树莓派的教程无多余显示器IP未知情况下登录树莓派

2、将摄像头与树莓派连接

给树莓派供电,开机进入树莓派的桌面 ,点击桌面的左上角的树莓派图标,选择首选项,选择Raspberry Pi Configuration->interface。将Camera这一栏选择Enable,这样开启了树莓派的摄像头服务。

3、配置树莓派开发环境

1.安装MJPG-streamer和一些需要用到的依赖。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install subversion libjpeg8-dev imagemagick libv4l-dev cmake git unzip
git clone https://github.com/jacksonliam/mjpg-streamer.git

 将上面的指令执行完后,MJPG-streamer软件包已近下载在你的树莓派里了,接下来我们需要对它进行一些配置。

cd mjpg-streamer/mjpg-streamer-experimental/
make all
sudo make install
cd $home

4、让摄像头开始进行画面录制

对软件进行编译完成后,我们回到根目录,输入以下指令:

/usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 45 -r 620x480" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"

  如果出现了这样的内容,则证明成功。此时树莓派已近将摄像头录制的画面上传至树莓派的8080端口。用一台与树莓派处于同一个网络的电脑打开浏览器,然后在网址栏输入以下来访问树莓派网络端口。

http://<树莓派IP>:8080/?action=stream

5、将监控画面服务设置为开机自启

sudo vim /etc/systemd/system/camera.service

输入上述代码后,将在system文件夹下自动创建一个名为camera.service的服务文件,并进入vim编辑模式,我们按键盘上的字母 i 进入插入模式,将下面代码写入到该文件中,然后按键盘上的ESC键退出插入模式,接着输入 :wq 退出并保存文本。

[Unit]
Description=camera daemon
After=syslog.target  network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 620x480" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"
Restart=always
RestartSec=1min

[Install]
WantedBy=multi-user.target

 接下来我们重载服务并启动监控画面服务,设置为开机启动。

systemctl daemon-reload    #重新加载服务配置文件
systemctl start camera     #启动监控画面的传输
systemctl enable camera    #设置监控画面为开机自启

可以输入 systemctl status camera.service 这段代码来确定是否成功开启。

如果停止该服务,可以输入指令 sudo systemctl stop camera.service

如果要重启应用,可以输入指令 sudo systemctl restart camera.service

完成上面的操作之后,我们接下来将进行内网穿透,把监控画面上传至公网。

2、内网渗透

1、服务器端frp配置

在这里我使用的是华为云+宝塔面板,服务器上安装的是Debian系统(x64)。所以我下载的版本是frp_0.37.0_linux_amd64.tar.gz如果你们的服务器和我的不一样,请选择适合自己的版本进行下载(FRP下载地址)。如果想要更详细的了解FRP,可以参考这个网站的说明(FRP说明文档)。

将该版本下载至服务器端后,使用下面的命令进行解压,,并cd进入该文件夹。

tar -zxvf frp_0.37.0_linux_amd64.tar.gz
cd frp_0.37.0_linux_amd64.tar.gz
接下来我们需要修改服务器配置文件 frps.ini ,同样是使用vim编译器进行编译。
vim frps.ini

然后在里面输入以下内容:

[common]
bind_port = 7000
vhost_http_port = 9000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
privilege_token = value

参数说明

bind_port:绑定的端口,需要与客户端中 server_port 参数保持一致

vhost_http_port:自己设定的http访问端口,之后将通过服务器IP+该端口来访问监控画面

dashboard_port:frp 后台服务页面的端口,如果设置7500,便可通过 http://yourip:7500 来访问 frps 的后台页面(yourip为你后面内容里设置的服务器ip)

dashboard_user:frp 后台服务页面的管理员用户名

dashboard_pwd:frp 后台服务页面的管理员密码

privilege_token:自定义值,必须与客户端中的 privilege_token 保持一致(一种验证机制)

编辑并保存好上面的参数之后,使用以下命令来启动frp服务端。

./frps -c ./frps.ini

2、将服务器端FRP设置为自动启动

上述操作完成后,我们将服务器端的frp设置为自动启动,输入以下命令即可。

sudo vim /lib/systemd/system/frps.service

和之前的方法一样,对配置文件 frps.service 进行修改。

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini
#ExecStart=/home/vulcan/frp/frps -c /home/vulcan/frp/frps.ini(例如我的是这个)

[Install]
WantedBy=multi-user.target

按上面的方法操作完成后,我们再输入启动frps和开启frps自动启动的指令。

systemctl start frps
systemctl enable frps

将上面操作完成后,我们可以输入 systemctl status frps 命令来查看是否配置成功。

3、配置宝塔面板

宝塔面板的具体使用可以参考宝塔的官方教程,找到对应自己的服务器配置进行安装即可。

宝塔链接

进入宝塔设置页面后,我们点击  安全  ,使用宝塔面板放行端口6000(远程ssh),7000(frp服务),7500(frp后台管理),8000(远程vnc),9000(监控画面)。

同时进入服务器后台,将以上端口添加进入方向规则,放行端口。

 4、客户端FRP配置(树莓派)

1、下载适合你树莓派的frp版本,我的是树莓派4B,安装的系统是raspberry pi os32位的,内核是arm的(可以输入  arch 查看所属系统是什么内核的)。所以我下载frp_0.37.0_linux_arm64.tar.gz这个版本。(点击下载frp

2、将下载好的文件解压,并使用cd命令进入解压出来的文件夹里。

tar -zxvf frp_0.37.0_linux_arm64.tar.gz
cd frp_0.37.0_linux_arm64

3、然后我们按照之前服务端的做法对客户端的配置文件frpc.ini进行修改。

vim frpc.ini

 输入下面的代码(将注释删除),保存。ca

[common]
server_addr = xxx.xxx.xxx.xxx (这里为你服务器的ip,例如我的是124.aa.bb.cc)
server_port = 7000
token = value

[ssh]                  (如果不需要ssh远程访问树莓派,这段可以删除)
type = tcp
local_ip = 127.0.0.1   (这里填你的树莓派在局域网中的ip,不知道的话就默认填127.0.0.1)
local_port = 22        
remote_port = 6000     (ssh远程连接的端口)

[vnc]                  (如果不需要vnc远程访问树莓派桌面,这段可以删除)
type = tcp
local_ip = 127.0.0.1   (这里填你的树莓派在局域网中的ip,不知道的话就默认填127.0.0.1)
local_port = 5900       
remote_port = 8000     (vnc远程连接的端口)

[web]            
type = http            
local_port = 8080         
custom_domains = xxx.xxx.xxx.xxx (这里为你服务器的ip,之后通过这个ip+前面服务器端设置的vhost_http_port端口就能在外网访问摄像头的画面)

 其中[ssh]和[vnc]作为可选项,看个人喜欢自由添加,[web]穿透摄像头画面。

4、配置好后,我们输入下面的代码,检查是否成功。

./frps -c ./frps.ini

在浏览器中输入124.aa.bb.cc:9000(你的服务器ip+端口9000)就能在外网访问摄像头画面啦。

5、客户端FRP自动启动

按照之前配置服务端的方法,对树莓派进行相同的操作就能完成客户端FRP的自动启动。 

三、安装4g模块

1、将4G模块与USB转接版接好,然后与树莓派相连接。

2、检测硬件连接,网络连接

在树莓派中输入以下指令:

lsusb

 如上图所示,可以看到华为模块已近被树莓派识别出来了,接下来我们再输入:

ifconfig

可以看到这个wwan0就是华为网卡。不过虽然网卡能识别出来,但是树莓派此时还不能通过该网卡进行联网,还需要先进行拨号才能联网。

3、进行拨号设置

在这里我是用wvdial来拨号连接4G网络,所以要先安装wvdial.。

sudo apt-get install wvdial

接下来配置联通卡的拨号信息

sudo vim /etc/wvdial.conf
[Dialer hw1]
Auto DNS = on
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Init3 = AT+CGDCONT=1,"IP","3gnet"
ISDN = 0
Modem Type = Analog Modem
New PPPD = yes
Phone = *99#
Modem = /dev/ttyUSB0
Username = guest
Password = guest
Baud = 9600

我这里的是联通卡的配置,如果是移动、电信则需要对phone和init3、username、pssword稍作修改。

运营商 APN 拨号号码 账号 密码
中国联通 3GNET *99# guest guest
中国电信 CTNET *99# ctnet@mycdma.cn(card) vnet.mobi(card)
中国移动 CMNET *99***1# card card

然后运行拨号命令:

sudo wvdial hw1

此时大概等待30s后,出现pppd的拨号信息后则证明成功。

此时树莓派已近可以正常上网了。(如果是用局域网登录树莓派的,可能还需要修改一下树莓派的默认网关,可以查看这篇文章进行配置)

4、开机自动拨号 

首先在  /home/pi/.config 下创建一个文件夹,名称为 autostart,如果以及存在改文件夹,cd进入即可。

mkdir /home/pi/.config/autostart

然后在该文件下创建一个xxx.desktop文件,文件名后缀为.desktop,名字随便,我这里的是ppp.desktop,然后在里面添加以下代码:

[Desktop Entry]
Name=ppp0
Comment=wwan0
Exec=sudo wvdial hw1
Icon=/home/pi/python_games/4row_black.png
Terminal=false
MultipleArgs=false
Type=Application
Categories=Application;Development;
StartupNotify=true

该文件中的Name、Comment、Icon分别表示这个启动项目的名称、备注以及显示的图标,具体的值可自行设定;Exec表示调用的指令。

接下来重启系统,就可以生效了,整个项目的配置调试到此结束。

四、总结

        在这个项目开发过程中,还是走了一些弯路。不过也借此学到了一些东西,收获颇多。写本文的原因有两个,一个是:在进行该项目的开发中,我也在互联网上查阅了大量的资料。其中有一些别人分享的资料中,也许是作者编写的疏忽,贴出的代码有一部分打错了。而身为小白的我自然是直接对着敲代码,导致我在该处运行中出现错误,浪费了不少时间才解决。于是我自己写了一篇教程,希望其他网友能少踩一些坑(不过我也不是神人,也不能保证我的文章代码都写对了),能让小白们多几份参考的资料。第二个是:我刚接触树莓派、linux、服务器时也是个小白,所以写这篇文章也是当作一份自己的成长录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用树莓派搭建远程实时画面传输 的相关文章

  • Paramiko:收集输出的 ssh.exec_command 表示打开通道作为响应

    我有带有 paramiko 和 ssh 的 python 脚本 如下所示 import paramiko setup ssh connection this works no problem ssh paramiko SSHClient s
  • 使用 PHP SSH 连接到远程服务器

    我想做一个SSH使用 php 连接到远程服务器 我在 Linux CEntOS 上使用 php 5 3 到目前为止我所做的 connection ssh2 connect 192 168 1 22 22 ssh2 auth password
  • mvn release 使用特定的私钥推送到 git

    我希望有人能帮忙解决这个问题 我正在尝试配置mvn release插件pom xml这样更新的 pom 版本和标签就会作为 git repo 的一部分推送到release prepare 至关重要的是 它需要使用特定用户的ssh私钥 因为最
  • 使用 SSH 从 BitBucket pip 安装自定义包,无需在 Docker 构建期间输入 SSH 密码

    我正在尝试 pip 安装 通过conda env create命令 来自 BitBucket 的自定义 python 包docker build命令 无需输入 SSH 密码 密码 这个问题类似于这另一个问题 https stackoverf
  • 直接通过 SSH 进入 docker 容器

    我有一些 docker 容器 现在我想通过 ssh 访问其中一个 这是工作我通过 ssh 连接到 docker 容器 但现在我遇到的问题是我不知道哪个用户可以访问这个容器 我已经对主机上的两个用户 网络和根 进行了尝试 但它们不起作用 知道
  • 如何使用 SSH 密钥和 Pageant 通过 Paramiko 连接到 SFTP

    我正在尝试使用受密码保护的 SSH 密钥通过 Paramiko 连接到 SFTP 我已将密钥加载到 Pageant 中 据我所知 Paramiko 支持该密钥 但我无法用它来解密我的私钥 我找到了这个例子here https stackov
  • 如何使用 bash/expect 检查 SSH 登录是否有效

    我的团队管理着许多服务器 公司政策规定这些服务器上的密码必须每隔几周更改一次 有时 我们的官方密码数据库会因某种原因而过时 人们通常会忘记更新它 但有时我们要到几个月后才能识别这一点 因为我们并不总是使用每台服务器 我想编写一个脚本 从数据
  • 使用 SSH.NET 在命令输出期间发送输入

    With PuTTY I connect to an SSH server and then I execute a command that constantly output logs multiple lines per second
  • 通过 SSH 隧道连接到 gitosis 服务器

    我的 MacBook 上有一个 SSH 隧道设置 就像这样 ssh o ServerAliveInterval 3 N L 22222 gitosis server 22 email protected cdn cgi l email pr
  • 没有公钥,GitLab 无法克隆公共存储库

    使用亚搏体育appGitLab 6 8 2 我可以以匿名方式克隆公共存储库吗 我的用户命名空间中的存储库标记为public 如果没有在 GitLab 中保存公钥 我就无法克隆它 例如 gt ssh T email protected cdn
  • Paramiko 和伪 tty 分配

    我正在尝试使用 Paramiko 连接到远程主机并执行许多文本文件替换 i o e client exec command perl p i e s initial replaced g conf 其中一些命令需要作为 sudo 运行 这会
  • 将 ed25519 私钥 ssh 转换为 RSA 私钥

    我正在寻找使用将 ed25519 私钥转换为 rsa 私钥ssh keygen I found 这个有用的指南 https man openbsd org ssh keygen但我无法弄清楚如何指定输入格式为 ed25519 并且导出格式应
  • Mac OS X 上的 scp 问题:scp 不喜欢文件名中的空格,“\”修复不起作用

    我正在尝试使用 scp 在两台 Mac 操作系统 10 6 8 之间传输文件 但它失败了 因为我的目录 文件名中有空格 我无法更改目录 文件名 当我使用 Mac 在终端中工作时 我经常使用 符号来表示空格 然而 在这种情况下 它不起作用 我
  • 用于搜索内部文件的 ssh 命令

    几周前 我的两个网站可能被 ftp 暴力攻击所利用 破坏了我网站的许多文件 我发现他们通常会在js或php文件中插入以下代码 Trojan code removed as irrelevant to this question 我想通过 s
  • 如何在 Eclipse 中使用 ssh 隧道设置 Subversion?

    我有一个远程服务器 在非标准 ssh 端口上托管我的 subversion 存储库 我想使用 Eclipse 的 subclipse 插件作为客户端来访问 SVN 存储库 我可以使用 svn specialssh 来访问存储库 其中spec
  • 如何在 ssh 命令中使用长输入参数正确转义 qsub 命令?

    我有一个复杂的 qsub 命令可以远程运行 PROJECT NAME TEXT TEST PROJECT PACK ORGANIZATION source organization MY ORGANIZATION CONTACT NAME
  • SQLPLUS 保存到文件

    我必须为我的数据库类使用 SQLPLUS 我们的第一个作业是简单的保存 我按照说明进行操作 我正在使用 PuTTY 访问 sqlplus 在本练习中使用以下 SQL 命令 并尝试使用 SAVE 和 SPOOL 命令将 SQL 命令和输出保存
  • Capistrano 和 GitHub Private Repo – 权限被拒绝(公钥)

    我继承了一个托管在 Linode 上的 Rails 项目 之前的开发人员使用 BitBucket 存储库以及 Capistrano 进行部署 我已经在 GitHub 上设置了一个私人存储库 并且正在尝试让 Capistrano 配方发挥作用
  • 远程 ssh 命令:第一个回显输出丢失

    我试图通过 ssh 1 liner 调用在远程机器上运行多个命令 方法是将它们指定为传递给 bash c 的分号分隔字符串 它适用于某些情况 但不适用于其他情况 看一下这个 Note the echo 1 output is lost ba
  • 如何配置 Ansible 跳过两个堡垒主机?

    我想编写一个 Ansible 剧本 使用 Ansible 2 7 5 它将在到达目标服务器之前跳过两个主机来执行诸如安装 docker 和 python 等操作 我能够让 Ansible 通过一台主机跳转到server1通过将其添加到我的h

随机推荐

  • 丽升评卷系统显示服务器地址错误,A3_丽升评卷系统评卷员操作方法-副本(2页)-原创力文档...

    PAGE PAGE 2 丽升评卷系统评卷员操作方法 操作方法说明将文字和图片结合 优化了叙述的条理性 尽量做到简洁明了 通俗易懂 即便不经培训 也可以独立动手操作 一 双击桌面上的丽升图标 弹出 用户登录 窗口 输入阅卷服务器IP地址 服务
  • Android手机上剪藏笔记到Obsidian

    前两天 Obsidian 正式发布了 v1 0 0 这两年老苏一直只是把 Obsidian 当一个 Markdown 编辑器在使用 是时候花时间研究怎么用 Obsidian 真正成为一个知识管理工具了 关于 Obsidian 详细的版本更新
  • Gensim word2vec计算多个词之间的相似度

    使用most similar 函数即可 代码如下 from gensim models import Word2Vec word model Word2Vec load wiki word2vec model 导入模型 word model
  • 用awk编写Shell脚本

    一 概述 1 产品概述 awk是一种编程语言 用于在linux unix下对文本和数据进行扫描与处理 数据可以来自标准输入 文件 管道 awk分别代表其作者姓氏的第一个字母 因为它的作者是三个人 分别是Alfred Aho Peter We
  • 吴恩达《机器学习》——线性回归代码实现

    线性回归 1 单变量线性回归 单变量线性回归公式 损失函数 优化算法 批梯度下降 BGD 2 多变量线性回归 特征缩放 标准化 参数的逆缩放 3 线性回归算法代码实现 向量实现 Python代码 4 实验结果 单变量回归 多变量回归 实验总
  • Ubuntu 14.04 64位上配置JDK操作步骤

    1 从 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 下载jdk 8u172 linux x64 tar gz 2 解压缩
  • 软件测试期末总复习(知识点+习题+答案)

    目录 1 软件测试基础 1 1软件概述 1 1 1软件的生命周期 1 1 2 软件开发模型 1 1 3 软件质量概述 1 2 软件缺陷管理 1 2 1 软件缺陷产生的原因 1 2 2 软件缺陷的分类 1 2 3 软件缺陷的处理流程 1 3
  • jvm之java类加载机制和类加载器(ClassLoader)的详解

    当程序主动使用某个类时 如果该类还未被加载到内存中 则JVM会通过加载 连接 初始化3个步骤来对该类进行初始化 如果没有意外 JVM将会连续完成3个步骤 所以有时也把这个3个步骤统称为类加载或类初始化 一 类加载过程 1 加载 加载指的是将
  • 无线连接服务器 很慢,无线网很慢是什么原因

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 无线网很慢的原因有 1 连接的网站所在的服务器带宽不足或负载过大 2 网线接触不良或者交换机的硬件原因导致 3 电脑本身存储文件过多等 所谓无线网络 是指无需布线就能实现各
  • 2022年天梯赛比赛真题,L1基础题,C语言,没有算法的那种

    目录 L1 1 今天我要赢 5 分 L1 2 种钻石 5 分 L1 3 谁能进图书馆 10 分 L1 4 拯救外星人 10 分 L1 5 试试手气 15 分 L1 6 斯德哥尔摩火车上的题 15 分 L1 7 机工士姆斯塔迪奥 20 分 L
  • spdk理解

    核跟线程的关系 在理解spdk 特别是spdk线程模型前 需要清楚cpu核跟线程的关系 首先 关于计算机系统的很多概念 都有 逻辑层 和 物理层 的区分 这个是前提 然后再看 核心 这个概念是 物理层 的概念 指的就是 CPU硬件的物理核心
  • OpenGL assimp库,编译 ‘File too big‘,‘too many sections’,IFCReaderGen.cpp 中报错

    QT环境下配置Assimp库 MinGW编译器 48条消息 QT环境下配置Assimp库 MinGW编译器 Elsa的迷弟的博客 CSDN博客 IFCReaderGen cpp 中报错 too many sections问题 如下图所示 此
  • SpringBoot整合kafka(实现consumer)

    如何在springboot中集成kafka收消息 1 pom xml引入依赖的jar包
  • 初始化和实例化的区别

    类的初始化 是完成程序执行前的准备工作 在这个阶段 静态的 变量 方法 代码块 会被执行 同时在会开辟一块存储空间用来存放静态的数据 初始化只在类加载的时候执行一次 类的实例化 是指创建一个对象的过程 这个过程中会在堆中开辟内存 将一些非静
  • php模式之装饰器模式2

    原文来自 大胖博客 在上一篇文章中 介绍了如何在代码架构之初 为了以后的扩展方便做的考虑 那么在现实中大部分的情况不是如此 那么我们需要重构这块么 不一定 今天我们使用另一种方式来实现装饰器 假设现在我们处在产品的第二个阶段 有下面第一阶段
  • 前端微信支付步骤(笔记)

    对接了两次微信支付 第一次对接的时候没有做记录下来 这一次把要记录下来 一 获取openId 1 在微信公众平台配置相关信息 具体按照微信官方文档步骤进行配置 mp weixin qq com wiki t reso 2 微信网页授权 文档
  • Js apply方法详解

    Js apply方法详解 主要解决一下几个问题 apply和call的区别在哪里 什么情况下用apply 什么情况下用call apply的其他巧妙用法 一般在什么情况下可以使用apply 首先从网上查到关于apply和call的定义 然后
  • 双重for循环删除数据

    1 倒过来遍历list for int i list size 1 i gt 0 i int item list get i if item 3 list remove item 2 每移除一个元素以后再把i移回来 for int i 0
  • Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

    1 设备连接 主控板处理器为Cortex A5处理器 内核4 9 0 主控板和CH452引脚定义如下表1 1所示 表1 1 主控板和CH452引脚定义 序号 CH452引脚定义 主控板引脚定义 1 SDA PB29 2 SCL PB30 3
  • 用树莓派搭建远程实时画面传输

    目录 一 材料准备 二 环境搭建 1 树莓派实现局域网监控画面传输 1 树莓派安装系统 2 将摄像头与树莓派连接 3 配置树莓派开发环境 4 让摄像头开始进行画面录制 5 将监控画面服务设置为开机自启 2 内网渗透 1 服务器端frp配置