网易青果后端系统设计窥探(含直播方案踩坑往事)

本文介绍了网易青果720P高清WiFi摄像头的后端系统设计,包括视频直播方案、消息通信与状态管理、OTA与版本控制等内容。解决了硬件芯片处理能力有限的问题,实现了低成本硬件上的高效视频直播。

本文作者:网易杭州研究院 · 裴斐

编者按:原文标题为《当软件搭讪硬件——青果后端系统设计》,创作于2015年,文章较长,但干货满满,分为(一)、(二)两篇,此为(一)。

网易青果

720P高清WiFi摄像头

网易首款智能硬件

易信首款轻应用接入....

(此处省略软文1万字)

 

那么,青果是啥?

先上王道,一睹为快。

那么问题来了:

  • BOBO主播上青果,千万屌丝用户同时观看XX高清直播如何实现?

  • 屌丝何苦为难屌丝,低成本硬件芯片要承载多高消耗任务,设备负担过重肿么办?

  • 当软件搭讪硬件,消息通信与状态管理如何做?

  • PM发福利推新功能,硬件固件更新设备如何便捷升级?老固件老应用兼容如何处理?

  • 家中情事钱事家务事,隐私信息如何保证?

 

带着这些问题,一起来看下这款智能硬件产品的后端设计。

  

总体架构


摄像头产品的总体架构,主要由轻应用APP、轻应用服务器、摄像头、网宿CDN及其网易内部的云存储(NOS)、视频转码(NTS)、消息推送(PUSH)、索引服务(NDIR)、易信公众平台等组成。

轻应用APP是指易信内的摄像头轻应用,直接面向用户。青果应用是易信首款轻应用,基于强大的colortouch跨平台移动开发框架实现。

轻应用服务器作为轻应用和摄像头的服务提供方,除产品业务处理外,还使用了较多网易内部平台和框架。

网易云(NOS)主要提供文件存储服务,摄像头截图、gif报警图、录像文件等均存于NOS。

消息推送平台(PUSH)作为应用与摄像头通信的桥梁,通常作为轻应用服务器向摄像头发送指令的消息通道。

视频转码服务(NTS)主要提供GIF合成、录像录制、视频合成(录像下载)服务。

网宿CDN作为摄像头视频数据内容分发平台,提供HLS转码、内容分发等服务。

索引服务(NDIR)提供了摄像头搜索底层服务。

易信公众平台提供了易信公众号能力以及与易信服务器能力开放接口。

视频直播方案

作为以实时直播为主要功能的硬件产品,视频直播的快速、稳定、安全无疑十分重要。青果在直播方案上有过两种选择。

最早的直播方案基于易信视频聊天库。由设备内置易信视频库SDK,与手机APP端的易信视频库进行视频聊天式通讯。这种方案视频实时性很强,前期一直作为私人摄像头直播的首选方案。但随着项目的发展,这种方案的劣势逐渐显现,最后只得挥泪放弃。

劣势啥?归根结底,其实还是在硬件本身能力上。成本出发,青果硬件本身处理能力有限,换句话说就叫做有所可为有所不可为。这种情况下,设备不仅要提供实时直播的能力,还需要移动侦测报警并上传若干图片,而且要自己合成录像上传到云,最关键的是,如果同时播放视频的人数上去了,这种方案很难为这种1对N的场景做扩展,直接会影响后续公共摄像头(可能数千数万用户同时看)相关功能。最终的结果就是设备不堪重负,跑累了罢工了事。

车到山前必有路,第二种直播方案呼之欲出。

方案二的核心在于简化设备上对视频流的处理,设备只需要根据不同场景,进行上传视频流以及结束上传即可。对于视频流,可以用内容分发的方式给到不同用户,再由播放器进行视频解码播放或者视频处理系统进行录像文件合成即可。

方案二的直播方案的流程设计图:


在播放实时视频时,首先向服务器请求播放地址。服务器在收到播放请求后,通过消息推送平台下发推流指令给摄像头,摄像头根据服务器下发的推流地址向CDN推送RTMP视频流。在服务器收到摄像头推流开始的回调通知后,将指定协议的播放地址告诉轻应用,轻应用播放器开始从CDN拉取视频流,开始客户端的视频播放工作。

目前,青果摄像头产品支持2种协议的视频播放,即HLS与RTMP。HLS是苹果系统标准播放协议,优势是在IOS系统下稳定性强,缺点是需要由CDN做RTMP到HLS转码,视频延时较大;RTMP是标准的实时消息传输协议,摄像头本身可以直接推送RTMP视频流到CDN,客户端播放器的拉取无需转码,实时性较强,但目前移动端系统原生支持不足,需要质量较高的播放控件支持。

方案二中,设备只需要推一路流就可以同时满足直播、录像合成、公共摄像头直播性能扩展等需求,虽然延时上较方案一会大一些,目前来看已经是一套较完善的直播方案。

消息通信与状态管理

      

青果应用与传统WEB方式的CS架构不同的是还涉及到了硬件设备,APP、服务器与硬件设备的通信方式决定了业务处理的消息流向。

APP与服务器之间的通信与传统CS架构无异,采用HTTP接口方式请求-响应,如果业务请求无需操作设备,直接由服务器将业务处理结果返回APP。

当APP请求需要操作摄像头设备时,场景会复杂些。服务器在收到请求后,通过消息推送平台(PUSH)向设备推送JSON消息。设备作为接收推送平台私信消息的客户端,在启动时已经从轻应用服务器获取绑定推送平台的相关参数,并通过集成在ARM系统中的推送平台SDK与消息推送平台服务器进行绑定,一切就绪后设备就可以正常接收推送平台的消息了。

设备在收到推送消息后,需要告知轻应用服务器业务处理结果或返回状态查询结果。由于推送平台的单向性,轻应用服务器自身实现了设备消息回调的处理。服务器地址与回调消息id会随着每次消息推送到设备,设备根据收到的回调地址将返回通过http方式回调轻应用服务器。

对于设备状态采用主动上报与强制获取两种方式。设备在线时会每隔一段时间主动上报设备在线状态、推流状态以及开关状态等,这种状态会被应用到一些对状态精确性要求不是很高的场景,如会在公共摄像头广场出现的在线摄像头;强制获取方式下,主要是在APP获取设备设置、下拉刷新设备状态、视频播放等用户即时操作设备的场景下,通过推送消息方式即时获取。这两种方式满足了不同场景下服务器获取设备状态的需要,但对推送平台稳定性、设备状态灯展现及消息处理要求较高,处理不当的话会容易出现“设备明明在线APP却显示离线”这种异常状态。

OTA与版本控制

这里的OTA(Over-the-Air)是指设备固件在线升级。在设备每次上电,系统重启时检测是否有新固件,青果摄像头OTA升级方式设计如下:

  1. 设备上报固件版本信息到服务器。设备每次上电接入前,将设备系统固件版本信息上报至服务器。该过程早于设备正常接入服务器。

  2. 服务器校验版本信息。服务器校验版本信息,如果有新固件,将新固件版本信息、api版本信息、下载url以及固件包MD5值返回给设备。

  3. 固件包下载、校验。如果有新固件,设备下载固件包,下载完成后取固件包MD5值,并与服务器提供的值做比较。相同的MD5值是固件升级的必要条件。

  4. 固件升级。设备执行固件升级。如果升级失败,设备需要回滚到原版本。升级成功后,再进行设备正常接入服务器过程。

后端系统在维护设备固件时除了固件版本信息外,还需要维护固件对应的服务器API版本号、设备硬件型号、固件下载地址等信息。随着产品功能的推进,APP、轻应用服务器以及设备固件都需要更新,以满足新的产品需求。轻应用服务器需要对新老版本的固件、APP进行版本兼容。

【下期看点】

除视频直播外,云录像也是目前智能摄像头产品的亮点功能。青果云录像机制是什么?青果服务安全设计、命令坝设计如何?敬请期待....


【推荐阅读】

点击底部阅读原文,可下载云信直播DEMO

网易云信∣为应用快速接入直播功能

ID:neteaseim  长按识别,关注精彩

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值