目的
快速开发一个实时视频监控的 Camera 端
因此这里写文章的目的是明确需求
应用场景
实时视频监控、动态捕捉
摄像头原理
基于RUDP的数据流,在树莓派4b上使用OpeCV的 VideoCapture 获取视频帧,压缩为 jpg 格式以后发送到对端。
当对端为控制服务器时,保存图像及时间戳,当用户从 web 访问时,推送 jpg 图像给浏览器并刷新
控制服务器原理
使用 Django 开发后台,Channels 实现 WebSocket 实时刷新图像。
后续可考虑当监控画面变化时发送 hls 直播流,目前的目的是跑起来
视频传输实现
协议支持功能(从0xf*往下):
URL | json 请求格式 | 描述 | 是否连接/安全 | 代码值 | json 应答格式 |
---|---|---|---|---|---|
0xe0 | { get_time : ‘’ } |
获取摄像头 Local Time | 否 | CAM_TIME | { camera-time: xxx } |
0xe1 | { get_camera_desc : ‘’ } |
获取摄像头配置信息 | 否 | CAM_INFO | { width,height,interval } |
0xe2 | { camera-name: xxx, camera-passwd: xxx, |
连接摄像头 | 是 | CAM_CONNECT | { camera-state: (int), camera-error: (string) } |
0xe3 | { keep-alive: true } |
传输视频流 | 是 | CAM_FRAME | 装在Buffer 里的视频帧 |
0xe4 | { camera-name: xxx, camera-passwd: xxx } |
断开连接 | 是 | CAM_BREAK |