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

目录

一、材料准备

二、环境搭建

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

1、树莓派安装系统

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

3、配置树莓派开发环境

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

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

2、内网渗透

1、服务器端frp配置

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

3、配置宝塔面板

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

5、客户端FRP自动启动

三、安装4g模块

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

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

3、进行拨号设置

4、开机自动拨号 

四、总结



一、材料准备

设备数量
树莓派4B1
树莓派摄像头(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#guestguest
中国电信CTNET*99#ctnet@mycdma.cn(card)vnet.mobi(card)
中国移动CMNET*99***1#cardcard

然后运行拨号命令:

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、服务器时也是个小白,所以写这篇文章也是当作一份自己的成长录。

### 实现手机APP对树莓派进行远程监控 为了实现通过手机应用程序 (APP) 对树莓派进行远程监控,可以采用一种基于 WLAN 的通信方案。此方法允许用户利用智能手机上的 APP 来查看由安装于树莓派摄像头所捕捉的画面,并能发送指令使搭载有该设备的小车按照指定的方向移动[^1]。 #### 构建服务器端程序 在树莓派一侧需部署服务端软件来负责接收来自客户端的数据请求并向其传输图像帧。这里推荐使用 Python 结合 Flask Web 框架搭建 HTTP API 接口用于处理网络连接逻辑;同时调用 OpenCV 库读取 USB 或 PiCamera 设备中的影像资料作为直播源[^2]。 ```python from flask import Flask, render_template_string, Response import cv2 app = Flask(__name__) camera = cv2.VideoCapture(0) def gen_frames(): while True: success, frame = camera.read() if not success: break ret, buffer = cv2.imencode('.jpg', frame) yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + buffer.tobytes() + b'\r\n') @app.route('/video_feed') def video_feed(): return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame') if __name__ == "__main__": app.run(host="0.0.0.0", port=8080) ``` 上述代码片段展示了如何配置一个简易版的视频流媒体服务器,它会持续不断地向已建立连接的浏览器推送最新的图片帧序列形成动态画面效果。 #### 开发移动端应用界面 对于 Android 平台而言,开发者可以选择 NativeScript、React Native 或者 Flutter 这样的跨平台开发工具快速构建原生体验的应用程序原型。iOS 用户则可能倾向于 Swift/Objective-C 编程语言配合 Xcode IDE 完成相同的工作流程。无论哪种方式都离不开 WebView 组件加载 HTML5 页面或是直接集成第三方 SDK 支持 MJPEG/RTSP 协议解析播放 RTMP 流地址。 假设已经拥有了一个具备基本功能的操作面板,则可以通过 WebSocket 技术实现实时双向通讯机制从而下达具体动作命令给到远端机器完成诸如前进后退转弯等操作。 #### 配置无线局域网环境 确保所有参与交互过程中的电子装置均处于同一 Wi-Fi 子网内部非常重要。因为大多数情况下私有 IP 地址段内的主机之间可以直接相互通信而无需额外配置路由器规则开放特定端口号映射至公网接口之上。 一旦完成了以上准备工作之后便可通过输入形如 `http://<Raspberry_Pi_IP>:8080/video_feed` 形式的 URL 访问位于本地网络里的多媒体资源了。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值