本文作者:网易杭州研究院 · 裴斐
编者按:原文标题为《当软件搭讪硬件——青果后端系统设计》,创作于2015年,文章分为(一)、(二)两篇,此为(二)。
云录像机制
除了视频直播外,云录像也是目前智能摄像头产品的亮点功能。前面章节(青果后端系统设计(一))在讲到视频直播时已经提到,云录像与直播对设备而言都是相同方式的推流,由后端视频转码服务(NTS)拉取视频流并合成MP4文件。
青果摄像头云录像设计如下图:
目前青果产品的录像由摄像头移动侦测触发。移动侦测触发后,摄像头通知服务器有录像事件,服务器创建NTS录像任务,并分别告知摄像头和NTS视频流的推、拉流地址,NTS作为一个‘客户端’拉取视频流做MP4合成工作,生成的文件存储NOS并将文件信息回调轻应用服务器,服务器负责记录录像数据,在APP获取录像信息时提供有效数据。目前服务器提供了时间轴与文件列表两套录像接口,供不同场景录像展现使用。
整个云录像过程相对清晰,但实现起来问题却不少。问题根源恰恰在于录像不在本地而在“云端”。云端录像在方便用户操作的同时,由于用户家庭网络的不稳定性,在网络环境不好的情况下,很容易导致设备推送的视频流数据缺失。这种情况下如果是用户观看直播的场景,表现可能就是视频卡顿,APP可以根据网络情况反馈用户相应的提示,但对于后端录像转码服务而言,残缺的视频数据很可能造成合成的录像不准确,其中还要涉及异常文件的甄别、重复录像的去重等难于解决的问题,最终体现到用户的录像也存在残缺的可能。这个问题可以算是云端录像的弊端,技术层面目前只能通过异常视频流处理调优来逐步优化解决。
安全概述
系统介绍到这里,一定有人会问,你们的系统安全么?别人能看到个人私有的摄像头、图片、录像么?后台人员是不是可以把所有摄像头看个遍(这点不解释,说好的有态度有节操!不会看也不能看)。下面对青果服务安全设计做一下概述。
APP安全。APP安全是指只有合法易信用户才有拉取应用数据和进行具体操作的权限。每次进入轻应用时由APP携带加密的易信用户参数获取userKey,轻应用服务器调用易信认证任务校验易信用户是否合法,如果是合法用户,则生成具有时效性的userKey返回轻应用。之后轻应用对服务器接口的每次调用都要携带userKey供服务器校验身份。与此同时,每次业务操作接口调用的用户id也必须与userKey匹配,保证当前易信用户有权限操作该用户相关的摄像头。示意图如下:
设备安全。设备安全是指摄像头到服务器接口的调用必须是合法的。轻应用添加摄像头时,生成随机串作为密钥分别下发给服务器和摄像头,摄像头连接网络后的每次服务器调用,必须用约定的算法计算包含防篡改特性的签名作为访问凭证,服务端对开放给设备的所有接口调用校验访问凭证。只有校验通过的设备才有权限访问相应接口。示意图如下:
其他安全。除了以上说明的APP安全、设备安全外,视频播放安全、录像以及图片文件也涉及用户隐私,对整个产品十分重要。视频播放的链接采用防盗链机制,链接本身携带防盗参数与时间戳参数,过期或错误的参数构成的链接对视频流的拉取会被CDN服务器禁止。录像、图片文件存储在网易云的私有桶,同样具有防盗以及过期访问权限限制,确保数据安全。
命令坝设计
这里说的“命令坝”,实际上就是当APP对设备发起频繁操作时,由服务器拦截一些无谓的重复操作,并将关键命令放行。设备毕竟是小设备,试想如果上万人同时对公共摄像头进行播放操作,设备一定难于承受。青果摄像头目前主要有两种主要场景需要坝来拦截命令。
摄像头属性查询,设置坝:
直播、录像坝:
后面的话
目前整个产品已经走到了公测的状态。后端系统在保证稳定性的同时,还是有一些问题需要不断改进,比如残缺录像,比如设备异常离线,比如服务器升级退避,比如系统数据运维等。路漫漫其修远兮,随着产品用户量的逐步增大,整个系统一定还有很多需要不断改进的地方,需要吾辈持续努力。
【上期回顾】
点击阅读
【推荐阅读】
点击底部阅读原文,可下载云信直播DEMO
网易云信∣为应用快速接入直播功能
ID:neteaseim 长按识别,关注精彩