ESP32-CAM 是一款集成了摄像头和 ESP32 处理器的开发板,能够实现实时视频流传输。开源项目 esp32cam-LIVE2 基于 ESP32-CAM,开发了一个简洁实用的实时视频流服务器,可以将摄像头拍摄的画面通过网页展示,并提供简单的设置功能。这个项目只有一个源代码文件,本文将围绕这个代码文件对该项目进行详细解析,深入了解其代码实现和功能。
一、项目初始化和配置
项目首先加载必要的库,包括 picoweb
用于构建网页服务器,ulogging
用于日志记录,gc
用于内存管理,ujson
用于 JSON 数据处理,network
用于网络连接,以及 camera
用于控制摄像头。
项目启动时会读取 config.json
文件,该文件存储了 ESP32-CAM 的配置信息,包括:
•
set_password
:ESP32-CAM 的 AP 密码•
set_wifi
:ESP32-CAM 的 AP 名称•
wifi
:连接的 WiFi 网络名称•
password
:连接的 WiFi 网络密码•
pixel
:摄像头分辨率
如果 config.json
文件不存在,则会创建一个默认配置文件,并设置默认配置信息。
二、网络连接
项目会创建两个网络接口:
•
ap
:作为 AP 模式,提供无线网络连接,方便用户通过手机或电脑连接 ESP32-CAM 进行设置。•
sta_if
:作为 STA 模式,连接用户指定的 WiFi 网络,用于将视频流传输到外部网络。
代码会根据配置文件中的 wifi
和 password
信息尝试连接指定 WiFi 网络,如果连接失败则会使用默认的 AP 模式。
三、摄像头初始化
项目会初始化摄像头,并根据配置文件中的 pixel
信息设置摄像头分辨率。代码提供了多种分辨率选项,用户可以通过配置文件选择合适的分辨率。
四、网页服务器
项目使用 picoweb
库构建了一个简单的网页服务器,提供以下功能:
• 主页: 显示实时视频流画面,以及设置和查看 IP 地址的链接。
• 设置页面: 提供修改 ESP32-CAM 的 AP 名称、密码、连接的 WiFi 网络名称和密码、以及摄像头分辨率的功能。
• IP 地址页面: 显示 ESP32-CAM 在网络中的 IP 地址。
五、视频流传输
项目使用 camera.capture()
函数获取摄像头拍摄的图像数据,并将其编码为 JPEG 格式。代码使用 send_frame()
函数将图像数据以 MJPEG 格式传输到网页浏览器,实现实时视频流播放。
总结
总而言之,esp32cam-LIVE2 项目是一个简单易用的 ESP32-CAM 实时视频流服务器,可以帮助用户快速搭建自己的视频监控系统。实验发现,代码运行过程中,会出现ESP32芯片资源占用较高情况,发热比较严重,视频流可能发生卡顿,开源代码需进一步优化才能实际应用。
项目地址:https://github.com/maysrp/esp32cam-LIVE2