目录
如何利用esp32-box-3,实现摄像头实时流
firmware
摄像头捕捉到一帧的数据后,拆包后通过 udp 传送到服务端
udp receiving
接收 udp 的分包数据,按照字节头判断是否为图片,合并之后保存成 bytearray
website
利用multipart/x-mixed-place;boundary=xxxx
的方式,实现实时图片流
troubleshooting
完成在本机调试后,将服务端代码部署至阿里云ecs,固件 udp 推送到服务器 ip,结果遇到了服务器没有接受到 udp 包的问题,以下是尝试的方案。
- 首先确认安全组里打开了 udp 的端口
- 使用 nc 开启监听
nc -4 -u -l 3333
- 使用 echo 命令推送数据
echo "Hello from PC" | nc -w1 -u ${ip} 3333
- 确认端口响应没有问题后,尝试使用 python 开启 udp 监听
import socket import sys # Create a TCP/IP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind the socket to the port server_address = ('0.0.0.0', 3333) print >>sys.stderr, 'starting up on %s port %s' % server_address sock.bind(server_address) while True: print >>sys.stderr, '\nwaiting to receive message' data, address = sock.recvfrom(4096) print >>sys.stderr, 'received %s bytes from %s' % (len(data), address) print >>sys.stderr, data if data: sent = sock.sendto(data, address) print >>sys.stderr, 'sent %s bytes back to %s' % (sent, address)
- 确认 python 接收没有问题后,就可以开始怀疑是 docker 的问题了
- 修改 ports 转发,在端口后加上
/udp
就可以了ports: - "3000:3000" - "3333:3333/udp"