提交 5d40f4fd 编写于 作者: 云逸之's avatar 云逸之 💬

更新0.0.3的自述文件

上级 aa3a73ce
# SimpleVideoServer
camServer 的demo使用esp32cam自己提供http服务和视频流,会有较大性能开销。而且需要内网穿透才能外网访问。本项目提供服务端合成视频流的方式,esp32cam只需要不停拍照发送给服务端,服务端处理浏览器查看视频的请求,合成视频流给浏览器。
我们可以把服务端程序部署在公网,可以通过这样的方式远程访问。
CameraWebServer 的demo使用esp32cam自己提供http服务和视频流,会有较大性能开销。而且需要内网穿透才能外网访问。本项目提供服务端合成视频流的方式,esp32cam只需要不停拍照发送给服务端,服务端处理浏览器查看视频的请求,合成视频流给浏览器。
我们可以把服务端程序部署在公网,便可可以通过这样的方式远程访问。
```mermaid
graph LR
e(esp32cam)
e1(esp32cam1)
e2(合宙esp32S3)
S(SimpleVideoServer)
e -->|帧|S
e1 -->|帧|S
e2 -->|帧|S
B(浏览器)
S -->|mjpeg视频流|B
B2(浏览器2)
S -->|mjpeg视频通道1|B
S -->|mjpeg视频通道2|B
S -->|mjpeg视频通道3|B
S -->|mjpeg视频通道3|B2
```
本项目提供了,服务端代码与esp32cam(或合宙ESP32S3)的代码。
......@@ -22,11 +32,11 @@ _如果支持该项目,请点star ⭐ 而不是 关注通知,后者只会让
根据自己需要选择以下任意方式运行服务端
* 下载 [windows服务端发行版](https://gitcode.net/qq_26700087/simpleVideoServer/uploads/bcafcb53130a277f3b6f92f8c83249a7/win_release.zip)
* 下载 [windows服务端发行版](https://gitcode.net/qq_26700087/simpleVideoServer/uploads/6921add7359f43de65f0ddbfb18506fd/win_release.zip)
解压之后,进入对应目录点击run.bat文件启动服务器。
* 下载[linux服务端发行版](https://gitcode.net/qq_26700087/simpleVideoServer/uploads/83402dcffb269aac326a2f5649ef6970/linux_release.tar.gz)
* 下载[linux服务端发行版](https://gitcode.net/qq_26700087/simpleVideoServer/uploads/adc7969ec556ca2a5bbf9eb6bdbb54f7/linux_release.tar.gz)
需要unzip或p7z等可以解压zip的应用
......@@ -52,24 +62,44 @@ _如果支持该项目,请点star ⭐ 而不是 关注通知,后者只会让
如鄙人执行的服务端日志打印含有esp32Cam接入的后的相关打印如下:
```
D:\Users\immor\idea\SimpleVideoServer\out\win_release>.\jre\bin\java -classpath SimpleVideoServer org.btik.server.video.Main
```tex
D:\Users\immor\idea\SimpleVideoServer\out\win_release>.\jre\bin\java -classpath SimpleVideoServer org.btik.server.video.UDP2Main
----- version:0.0.3 -----
[gitcode page] => https://gitcode.net/qq_26700087/simpleVideoServer
snChannelBinderPort:[TCP] 8004
binder stared
init buffer pool
start dispatchers
dispatcherPoolSize: 8
frameDelayTimeout: 3000
streamPort:[UDP] 8004
bufferPoolSize:500
udp channel loaded
httpPort:[TCP] 8003
bio video server started
bio Device Channel started
new channel:
http://127.0.0.1:8003/video/441793EE3C08
http://192.168.0.116:8003/video/441793EE3C08
http://192.168.137.1:8003/video/441793EE3C08
start /192.168.137.234:53051
Channel /7CDFA1FA0F08 is online
http://127.0.0.1:8003/video/7CDFA1FA0F08
http://192.168.0.110:8003/video/7CDFA1FA0F08
http://192.168.137.1:8003/video/7CDFA1FA0F08
```
每接入一个摄像头会新建一个频道,在`new channel:`的打印后会出现,相关可以访问视频流的地址。
每接入一个摄像头会新建一个频道,在`Channel /{mac地址} is online:`的打印后会出现,相关可以访问视频流的地址。
video后为通道地址,为设备的mac地址不含分隔符十六进制大写的字符串。
你可以在本机,或者局域网的其他设备访问
这个时候其实只是获取了设备的通道索引,并非开始传图片
部署在云服务器的同学把端口打开后,把内网ip替换成公网ip,或者域名即可。
如果供电不足,还需要等待足够长的时间,特别是合宙ESP32S3,在供电不足情况下,可能需要等待数分钟视频才稳定。
这些地址是获取网卡上的ip拼接成http地址。如果是云服务器,其公网ip并非在网卡上。
**部署在云服务器的同学把端口打开(需要开放安全组的端口见后文配置项相关说明)后,需要把内网ip替换成公网ip,或者域名即可**
每次重新启动接入服务器都会打印`Channel /{mac地址} is online: `如果反复打印,可以看看是否接触不良。
......@@ -127,15 +157,27 @@ _如果支持该项目,请点star ⭐ 而不是 关注通知,后者只会让
```properties
http.port=8003
http.clients.limit=10
stream.port=8004
stream.bind.port=8004
frame.delay.skip.timeout=3000
udp.video.buffer.pool.size=500
udp.video.dispatcher.thread.size=8
udp.video.channel.size=128
```
**http.port** 为http的端口。
**http.port** 为http的端口 **TCP端口 公网时需要开放该端口**
**stream.port** esp32向服务端发送照片的端口 ,一般无需修改,修改则同步修改esp32中对应 的。**UDP端口 公网时需要开放该端口**
**stream.bind.port** esp32 获取通道索引的端口 **TCP端口 公网时需要开放该端口**
**frame.delay.skip.timeout** 接收esp32图片快于发给浏览器速度时,会造成图片积压,延时会逐步累积,当某帧图片接收和处理的延时超过当前阈值之后,丢弃该帧
**udp.video.buffer.pool.size** udp帧缓存池大小, 会固定占用一部分内存反复使用
**http.clients.limit** 摄像头在线接入限制数。本意是想限制客户端参与的数量故名为http.clients.limit,实际的实现是限制了摄像头的数量
**udp.video.dispatcher.thread.size** 分发线程数量,不是越多越好,目前不建议改大,因为当前mjpeg的带宽负载的压力根本无法在公网接大量摄像头,访问视频用户多也会同样占用带宽。
**stream.port** esp32cam像服务端发送照片的端口,在本项目中使用该默认端口,如果需要修改,一并修改esp32cam代码中连接的端口。一般无需修改
**udp.video.channel.size** 视频通道数量,会限制接入的数量,每个通道的索引在esp32接入的时候获取,该值不能超过255。并非同时在线数量,而是总设备数量,即是无其它设备在线,总数量用完,新的摄像头也无法接入。服务器重启后,则会重置,则需要esp32重启,重新获取通道索引。通道号的依据 是设备的MAC地址唯一对应一个索引
......@@ -147,17 +189,15 @@ stream.port=8004
没有其他需要可以下载上面的发型版本,已包含64位jre17,也可以使用自定义jre17运行。
代码理论上java8也可以编译,若有需要可以自行编译。
* :file_folder: **simpleVideoRecorder目录为esp32cam(或合宙ESP32S3)的代码**
使用platformio基于ardunio框架开发。
1.使用platformio开发的同学请按实际情况修改simpleVideoRecorder 目录下的platformio.ini的串口
1.使用platformio开发
修改simpleVideoRecorder 目录下的platformio.ini不同env的串口
修改以下内容切换开发板环境配置。来确定使用esp32cam配置或者使用合宙S3的配置。
切换开发板类型 修改以下内容切换开发板环境配置。来确定使用esp32cam配置或者使用合宙S3的配置。
```ini
[platformio]
......@@ -167,11 +207,27 @@ stream.port=8004
若使用命令则可以使用 -e 选项 后接具体env。
设置esp32 的CORE_DEBUG 日志级别,默认为info。
```ini
build_flags =XXX
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
;-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
```
2.使用ardunio IDE开发 ,为了保险起见,你可以把源码中`main.cpp`重命名为`main.ino`
2.使用ardunio IDE开发
**重命名文件 ,新建项目**
为了保险起见,你可以把源码中`simpleVideoRecorder.cpp`重命名为`simpleVideoRecorder.ino`
**选择开发板**
请注意 选择开发板 为esp32cam,需要安装esp32环境 。使用合宙S3时选择 `ESP32S3 Dev Module` ,一般默认就好,可以注意看psram需要设置为禁用。
选择开发板 为esp32cam,需要安装esp32环境 。
使用合宙S3时选择 `ESP32S3 Dev Module` ,一般默认就好,可以注意看psram需要设置为禁用。
若找不到ESP32S3相关开发板,则说明你的ide上的esp32相关环境未安装2.0以上的版本。添加
......@@ -183,6 +239,10 @@ stream.port=8004
由于包很大也较多失败率也会很高。
**设置CORE DEBUG 级别**
在arduino ide的 工具 -> CORE DEBUG LEVEL 某些打印至少需要 info级别才能打印。
* 如果在局域网也可以使用PC作为服务端,查看充当服务端的PC的ip。
......@@ -191,7 +251,7 @@ stream.port=8004
* 修改main.cpp中的wifi的ssid和密码
* 修改simpleVideoRecorder.cpp中的wifi的ssid和密码
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册