如何构建伪视频流服务? 低延时低采样, 基于 OpenResty , HTTP, 内网...
时间: 2020-08-20来源:V2EX
前景提要
背景 出于各种业务 /硬件 /软件博弈, 最终不得不面对... 局网中一台 Linux mini 主机 接入多路 web cam. 由 FFmpeg 采集视频为帧图片编号输出到硬盘 -f image2 frames/%05d.jpg 类似参数控制输出 另外主机用 Electron 开发控制客户端 需要拿到实时图像, 以便形成监察视频, 要求尽可能延时小 页面刷新 15fps 以上即可 但是, 从 Linux 到控制端, 延时得尽可能小
分析 从硬件到展示延时尽可能小 就不能走标准流媒体协议了 无论什么协议都得先视频->流化->广播->接收->解码(专用)->展示 特别是有的适用许可证约束只能走外网免费服务, 延时随便就超过 10 秒... 注意到有很多视频广播技术其实是 伪视频 : 服务端持续更新约定图片 客户端反复通过 HTTP 拿到包含新内容图片 在 HMTL 页面反复加载 形成原始意义实时电影 问题在: FFmpeg 是按序列号约定自动变化图片名输出到指定目录 远程 JS 想拿到最新一帧图片 首先要知道最新图片名, 才能发起请求
设想 功能服务 用 Python 可以快速完成一个 API 服务 提供接口, 比如: /frame/last 反馈最新一帧图片名 然后从 Nginx 发布静态目录下载 但是, 这样消耗两次 HTTP 请求时间 ngx_lua 应用 用 OpenResty 加载一 lua 功能脚本 提供接口, 比如: /frame/last 反馈最新一帧图片内容 将两次请求变成一次 但是, 这要求 lua 进行实时同步文件操作 不知是否合理 以及具体系统损耗如何
讨论
或是有其它更加优雅方案?
感谢大家任何建议.