网易青果后端系统设计窥探(含直播方案踩坑往事)
本文作者:網易杭州研究院 · 裴斐
編者按:原文標題為《當軟件搭訕硬件——青果后端系統設計》,創作于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升級方式設計如下:
設備上報固件版本信息到服務器。設備每次上電接入前,將設備系統固件版本信息上報至服務器。該過程早于設備正常接入服務器。
服務器校驗版本信息。服務器校驗版本信息,如果有新固件,將新固件版本信息、api版本信息、下載url以及固件包MD5值返回給設備。
固件包下載、校驗。如果有新固件,設備下載固件包,下載完成后取固件包MD5值,并與服務器提供的值做比較。相同的MD5值是固件升級的必要條件。
固件升級。設備執行固件升級。如果升級失敗,設備需要回滾到原版本。升級成功后,再進行設備正常接入服務器過程。
后端系統在維護設備固件時除了固件版本信息外,還需要維護固件對應的服務器API版本號、設備硬件型號、固件下載地址等信息。隨著產品功能的推進,APP、輕應用服務器以及設備固件都需要更新,以滿足新的產品需求。輕應用服務器需要對新老版本的固件、APP進行版本兼容。
【下期看點】
除視頻直播外,云錄像也是目前智能攝像頭產品的亮點功能。青果云錄像機制是什么?青果服務安全設計、命令壩設計如何?敬請期待....
【推薦閱讀】
網易視頻云關鍵技術
視頻云直播:場景、技術及優化
Po校園接入云信,多機位“有毒”直播燃爆LIVE
點擊底部閱讀原文,可下載云信直播DEMO
網易云信∣為應用快速接入直播功能
ID:neteaseim ?長按識別,關注精彩
總結
以上是生活随笔為你收集整理的网易青果后端系统设计窥探(含直播方案踩坑往事)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Po校园接入云信,多机位“有毒”直播燃爆
- 下一篇: 家校无忧接入云信,教师家长即时沟通