# simpleVideoServer **Repository Path**: jonehoo/simpleVideoServer ## Basic Information - **Project Name**: simpleVideoServer - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-03-15 - **Last Updated**: 2025-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SimpleVideoServer 该项目仅仅是LightServer的一个模块,早期单独开源出来。现有功能更加完善的esp32摄像头方案 => [LightCam](https://gitee.com/yunyizhi/light-nodes/tree/master/LightCam) 支持摄像头更多设置操作。 CameraWebServer 的demo使用esp32cam自己提供http服务和视频流,会有较大性能开销。而且需要内网穿透才能外网访问。本项目提供服务端合成视频流的方式,esp32cam只需要不停拍照发送给服务端,服务端处理浏览器查看视频的请求,合成视频流给浏览器。 我们可以把服务端程序部署在公网,便可可以通过这样的方式远程访问。 劝退提醒,云服务器并不便宜,便宜的带宽如果只有1~2M, 除8 得到实际带宽不足以传大图,本人测试传HVGA分辨率的图,http下载的速度也能达到三百甚至四百KB每秒。当然你可以降低画质,或者降低帧率。 当然你有条件内网穿透也行。 ```mermaid graph LR e(esp32cam) e1(esp32cam1) e2(合宙esp32S3) S(SimpleVideoServer) e -->|帧|S e1 -->|帧|S e2 -->|帧|S B(浏览器) B2(浏览器2) S -->|mjpeg视频通道1|B S -->|mjpeg视频通道2|B S -->|mjpeg视频通道3|B S -->|mjpeg视频通道3|B2 ``` 本项目提供了,服务端代码与esp32cam(或合宙ESP32S3)的代码。 :file_folder: `simpleVideoRecorder` 目录下载为esp32cam(或合宙ESP32S3)的代码。 _如果支持该项目,请点star ⭐ 而不是 关注通知,后者只会让你收到关于该项目的动态的邮件通知。_ ### 本人其他摄像头方案 ##### 1.[ffmpeg/video · 云逸之/espressif-demo ](https://gitee.com/yunyizhi/espressif-demo/tree/master/ffmpeg/video) 将jpeg发给ffmpeg以h.264通过rtp推送,可以一定程度减少带宽占用 ```mermaid graph LR esp32[esp32] ffmpeg[ffmpeg] vlc[vlc] esp32 -->|"mjpeg over udp"|ffmpeg ffmpeg-->|"rtp h.264"|vlc ``` 支持 * esp32cam * 合宙esp32s3 * esp32-wrover-cam * ESP32-S3 WROOM N16R8 CAM 附视频录制方法。 ##### 2.[usb_camera · 云逸之/espressif-demo ](https://gitee.com/yunyizhi/espressif-demo/tree/master/usb_camera) esp32s2/esp32s3 驱动usb摄像头将jpeg发给ffmpeg以h.264通过rtp推送。 esp32s2/s3的usb只占用两个io,可以节省大量引脚。 可以使用价格约10元的esp32s2 mini实现视频功能。需要结合乐鑫官方店的usb摄像头。 附视频录制方法。 ##### 3.[LigthUsbCam · 云逸之/LightNodes ](https://gitee.com/yunyizhi/light-nodes/tree/master/LigthUsbCam) esp32s2/esp32s3 驱动usb摄像头 推mjpeg 给light server或者 lightHandle。硬件与第二项相同。 ##### 4.[LightCam · 云逸之/LightNodes ](https://gitee.com/yunyizhi/light-nodes/tree/master/LightCam) 支持 五款esp32开发板推mjpeg 给light server或者 lightHandle,已更新接入服务,遇到临时信号中断,控制通道可以在网络正常时自愈。 - esp32cam - 合宙esp32s3 - esp32-wrover-cam - Freenove ESP32-S3-WROOM Board 某宝叫做 ESP32-S3 WROOM N16R8 CAM - Seeed Studio XIAO ESP32S3 以上esp32均使用mjpeg over udp发送,可正常被ffmepg处理。如果需要处理视频流,也可以直接从esp32推,发送端可参考`1` `2`项。 如果需要推到直播平台如B站,可以使用ffmepg推送。 ## 运行服务端 根据自己需要选择以下任意方式运行服务端 * 下载 [windows服务端发行版 0.0.3.1](https://gitee.com/yunyizhi/simpleVideoServer/releases/download/v0.1/win_release_0.0.3.1.zip) 解压之后,进入对应目录点击run.bat文件启动服务器。 * 下载[linux服务端发行版](https://gitee.com/yunyizhi/simpleVideoServer/releases/download/v0.1/linux_release_0.0.3.1.tar.gz) 需要unzip或p7z等可以解压zip的应用 运行 ```shell tar -zxvf linux_release_0.0.3.1.tar.gz cd linux_release/ sh run.sh ``` * 发行版内部仅仅是一些java17 版本的class文件和jre以及启动脚本,你也可以使用任意其它的jre17运行这些class文件。并非需要发行版。 > 比如你希望在macos运行当前服务端时,将macos的jdk17或者jre17复制到linux发行版的目录中,替代其jre目录,参考run.sh中命令调用jre下java运行服务端。 * 访问视频服务 每个摄像头处在不同频道,访问不同的摄像头需要不同的地址。 但这个版本没有测试多频道,只能说理论上没有问题。 如鄙人执行的服务端日志打印含有esp32Cam接入的后的相关打印如下: ```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 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 ``` 每接入一个摄像头会新建一个频道,在`Channel /{mac地址} is online:`的打印后会出现,相关可以访问视频流的地址。 video后为通道地址,为设备的mac地址不含分隔符十六进制大写的字符串。 这个时候其实只是获取了设备的通道索引,并非开始传图片。 如果供电不足,还需要等待足够长的时间,特别是合宙ESP32S3,在供电不足情况下,可能需要等待数分钟视频才稳定。 这些地址是获取网卡上的ip拼接成http地址。如果是云服务器,其公网ip并非在网卡上。 **部署在云服务器的同学把端口打开(需要开放安全组的端口见后文配置项相关说明)后,需要把内网ip替换成公网ip,或者域名即可**。 简单得说就是控制台打印了 http://127.0.0.1:8003/video/7CDFA1FA0F08 替换成 http://公网ip或域名:8003/video/7CDFA1FA0F08 每次esp32重新启动接入服务器都会打印`Channel /{mac地址} is online: `如果反复打印,可以看看是否接触不良。 * 关于如何把视频界面嵌入其它网页 如果你擅长web开发,或者不喜欢在多个窗口查看多个摄像头可以参考以下方法增加自己的内容。 本视频流是允许跨域的,若希望在自己的网页里面加入本服务端提供esp32Cam视频窗口, 其实不用html的 `iframe`标签,`img`标签即可。 比如以下html代码,新建一个文件比如`a.html` 复制以下内容,根据实际情况,替换`img`标签`src`属性的内容。 ```html