实时画面回传的开发复盘
- 任务管理要注重对任务的全生命周期进行管理,设计好任务状态的枚举值是一个前提
- 要有超时机制,可以有多种方案,比如用redis的zset,把时间戳作为分值,然后用一个线程来读取到期的数据,处理后就从zset中移除
- 折腾了一圈,最终采用的方案是客户端用http的chunk模式推送ts二进制数据,服务端收到后用websocket进行广播,这样浏览器就可以准实时播放画面了。方案是领导提的,需要开阔自己的技术视野,方能找到这种简洁合适的方案。
- 在chunk模式推流时遇到了问题,经过nginx的转发后画面播放不出来了。借助ai找到了解决方案,应该是nginx对请求和响应做了缓冲导致的,禁用后就可以。 需要在nginx的主配置http模块中加入以下配置项:
# 禁用请求缓冲proxy_request_buffering off;proxy_buffering off;proxy_http_version 1.1;# 关键头信息传递proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 保持原始传输编码proxy_set_header Transfer-Encoding "";# 超时设置(单位:秒)proxy_connect_timeout 86400;proxy_send_timeout 86400;proxy_read_timeout 86400;send_timeout 86400;# 禁用响应缓冲proxy_max_temp_file_size 0;
逢山开路遇水搭桥,遇到问题不可怕,尤其是当下有这么趁手的AI辅助工具,所以保持轻松乐观的心态。但仍然是需要学习的,因为不学习,你都没办法向AI提问~