七牛云架構(gòu)師霍鍇
以下為演講實錄,略有刪減。
視頻直播發(fā)展到今天,在直播過程中加入互動元素已經(jīng)成為標配。”無互動,不直播”這句話在今天變得越來越常見。互動直播的場景是多種多樣的,主要集中在娛樂直播、在線教育、視頻會議和電商直播。比如說娛樂直播中多個主播進行 PK 的場景;在線教育領域的互動課堂;企業(yè)的內(nèi)部培訓;或者是電商的帶貨直播,都可以用到七牛云互動直播解決方案。
七牛云互動直播方案的架構(gòu)
對于整個方案來說,首先需要主播端通過攝像頭和麥克風采集音視頻數(shù)據(jù),然后根據(jù)需求進行直播或連麥等不同場景的實現(xiàn)。在編碼數(shù)據(jù)之前,也可以針對采集到的音視頻數(shù)據(jù)進行預處理,比如說加上水印,美顏,濾鏡,混音等效果。主播還可以通過人臉核驗進行登陸驗證,或者通過 IM 聊天室分享信息。
在主播端完成音視頻的采集處理以及編碼后,會將編碼后的數(shù)據(jù)發(fā)布到七牛實時音視頻云上,實時音視頻云會根據(jù)主播的場景來選擇它是單路轉(zhuǎn)推還是合流轉(zhuǎn)推服務,進而把單主播的畫面或者把多個主播合流之后的畫面通過 RTMP 轉(zhuǎn)推到我們的直播云上。在直播云上,我們可以把這些音視頻數(shù)據(jù)進行實時轉(zhuǎn)碼,比如按照不同的碼率或分辨率進行轉(zhuǎn)碼,以匹配觀眾端的網(wǎng)絡狀況。并且,我們還可以把這些音視頻數(shù)據(jù)進行內(nèi)容審核,從而判斷哪些數(shù)據(jù)是違規(guī)的,哪些數(shù)據(jù)是合法的。此外,我們也可以把這些數(shù)據(jù)進行落存儲操作,用于以后的點播服務。
上面這張圖我們可以比較清楚的看到音視頻數(shù)據(jù)的流轉(zhuǎn)過程,從客戶端的采集,到互動服務器的處理轉(zhuǎn)發(fā),再到流媒體服務器的審核分發(fā),這整個流程是怎么交互的。接下來,我會給大家介紹一下每個環(huán)節(jié)都是怎么工作的,也就是我們互動直播方案的相關技術(shù)的實踐。
七牛云互動直播方案的相關技術(shù)實踐
1、客戶端的技術(shù)與挑戰(zhàn)
這張圖的右側(cè)是我們在服務了眾多客戶后,沉淀下來的我們客戶端 SDK 的幾個指導性的原則:
第一是接入極致簡單,接口必須人性化。我們的第一用戶是程序員,所以我們必須能夠做到和大家感同身受,把接入流程簡化到極致,用以減輕大家的接入成本。第二是一定要保證我們的音視頻體驗良好。整個方案的核心還是在音視頻上,所以要特別重視清晰度,延遲,卡頓,回聲等這些影響音視頻體驗的重要因素。第三是可擴展性要強,生態(tài)化要好,可以滿足客戶的多種拓展性需求,如美顏處理、降噪處理等。第四是客戶端自己要感知到線上運行的情況。比如有沒有崩潰,堆棧信息是什么,哪個接口引起的,我們一定要做到對線上的真實情況可感知。
左側(cè)是七?;又辈ソ鉀Q方案客戶端相關的主要功能,總體分為三大類型,首先是數(shù)據(jù)的采集,處理,編碼,傳輸,播放,回聲消除等這些音視頻相關的核心功能。然后就是像高級美顏,人臉核驗,IM 等外圍業(yè)務相關的功能。最后就是數(shù)據(jù)上報、崩潰捕獲等至關重要的 QoS 功能。
2、客戶端的分層架構(gòu)
我們整個的客戶端可以抽象為三層,底層,核心層和擴展層。
底層是指包括 WebRTC,F(xiàn)Fmpeg,WebSocket,xCrash 等我們所依賴的第三方開源庫。
再往上是我們的核心層,在這一層我們會對底層進行封裝,并實現(xiàn)我們核心的業(yè)務。比如,我們基于 WebRTC 來實現(xiàn)攝像頭與麥克風的采集,音視頻編碼傳輸,多 Track,大小流,回聲消除和降噪等一系列實時音視頻的相關功能;我們通過 OpenGL 來實現(xiàn)水印,紋理剪裁,美顏處理等一系列視頻數(shù)據(jù)的處理;通過 FFmpeg 來實現(xiàn)像混音,重采樣等一系列音頻數(shù)據(jù)的處理;通過 WebSocket 去封裝信令,實現(xiàn)房間管理;通過 xCrash 來捕獲 Android 系統(tǒng)上的崩潰信息。
最上層是我們的擴展層,主要是用來擴展第三方的 SDK,比如 IM,F(xiàn)aceID,高級美顏等外圍業(yè)務相關的功能。
舉例來說,有不少客戶覺得接入美顏 SDK 是一個痛點,因為每一家的美顏 SDK 的接入步驟都會有所不同,他們和音視頻 SDK 之間還是有著不小的 gap ,那么怎么讓大家用最快的方式接入,不用考慮 OpenGL 環(huán)境,不用考慮紋理的轉(zhuǎn)換,資源的加載,甚至在接入的過程中感知不到自己其實是用到了多家美顏的,這就需要我們在中間做一層可擴展性美顏插件。
3、可擴展性美顏插件
我們會把 RTC SDK 從攝像頭中采集的視頻數(shù)據(jù)通過回調(diào)先送到 Beauty Plugin 中,然后 Plugin 會根據(jù)美顏 SDK 需要的規(guī)格進行視頻數(shù)據(jù)的轉(zhuǎn)換,比如紋理數(shù)據(jù)的鏡像,旋轉(zhuǎn),OES 轉(zhuǎn) 2D 紋理等操作。同樣的,也會對 YUV 數(shù)據(jù)按照要求進行轉(zhuǎn)換。通過 Plugin 層處理之后的數(shù)據(jù),再傳入美顏 SDK 層,就可以增加美顏,美妝,貼紙,濾鏡等一系列效果了,最后再把處理之后的數(shù)據(jù)通過回調(diào)函數(shù)傳入我們的 RTC SDK 中進行預覽和編碼。在這個過程中,我們的美顏插件還會對美顏資源進行整理和加載,以方便用戶對資源的控制。而對外來說,我們僅僅提供幾個最簡單的方法,從而極大地減少了接入成本。
4、單主播直播
主播端的數(shù)據(jù)到了實時音視頻云之后,如果是單主播直播,沒有連麥的場景,那么我們就通過單路轉(zhuǎn)推,把 RTC 流轉(zhuǎn)換為 RTMP 流,然后再轉(zhuǎn)推到我們的視頻直播云上。
5、多主播連麥直播
如果是多主播連麥直播的場景,那么就通過合流轉(zhuǎn)碼,也就是首先要把各個主播的畫面進行合并,然后再轉(zhuǎn)成 RTMP 流推送到視頻直播云上。
6、內(nèi)容審核的處理流程
音視頻數(shù)據(jù)到了直播云上,我們還可以對這些數(shù)據(jù)進行內(nèi)容審核,只有通過內(nèi)容審核的音視頻數(shù)據(jù)才能夠給到觀眾進行觀看。
首先我們把數(shù)據(jù)流分為視頻數(shù)據(jù)和音頻數(shù)據(jù),對于視頻數(shù)據(jù),會抽幀成一張一張的圖片,然后進行圖像識別和文字識別。對于音頻數(shù)據(jù),則會分切成一小段一小段的音頻,然后對這些數(shù)據(jù)進行語音識別,也就是把語音轉(zhuǎn)換為文字,從而能夠知道具體的內(nèi)容是什么;另外還可以對音頻數(shù)據(jù)進行自然語言的理解,因為一些違規(guī)音頻表達變化多端、 內(nèi)容隱晦,所以需要通過語義理解知道它真實表達的意思是什么;最后,還可以通過聲紋識別鑒別出里面是否有一些敏感人物的發(fā)言。
經(jīng)過審核的音視頻數(shù)據(jù)會被打上是否違規(guī)的標簽然后實時地回調(diào)給用戶,我們的用戶可以通過這些信息從而把違規(guī)的數(shù)據(jù)丟棄掉。同時,也可以在我們的復核平臺可視化地對這些數(shù)據(jù)進行復核。
7、數(shù)據(jù)驅(qū)動下的運營分析與質(zhì)量監(jiān)控
我們的互動直播方案是和七牛自研的 Pandora 數(shù)據(jù)分析平臺內(nèi)部打通的,所以我們可以通過數(shù)據(jù)打點,把一些質(zhì)量數(shù)據(jù)(如分辨率,碼率,幀率,丟包率,延遲等),業(yè)務數(shù)據(jù)(如房間數(shù),連麥時長,用戶量等),設備數(shù)據(jù)(如手機型號,系統(tǒng)版本,CPU,內(nèi)存占用情況等),或者一些事件數(shù)據(jù)(如服務端的內(nèi)部狀態(tài),客戶端的信令日志等)給上報到數(shù)據(jù)分析平臺之上。而我們的 Pandora 平臺就可以對這些數(shù)據(jù)進行清洗,存儲,搜索,監(jiān)控,分析,最后形成報表。有了這些數(shù)據(jù),我們就可以全方位地感知到線上的情況,例如,可以進行運維風險的預警,實時質(zhì)量的監(jiān)控,或者進行優(yōu)化功能迭代,分析運營數(shù)據(jù)等,如下圖,是我們一個 demo 的運營數(shù)據(jù)報表。
下圖是我們的可視化質(zhì)量監(jiān)控系統(tǒng),可以看到,我們能夠定位到某一位客戶,某個房間,某一路 Track,某一段時間的相關數(shù)據(jù),包括丟包率,幀率,碼率,RTT 等。
通過我今天的分享其實可以看到,打造一個互動直播的閉環(huán)解決方案是非常復雜的,不僅要包括一套端到端的音視頻數(shù)據(jù)的實時傳輸通道,要有美顏、人臉核驗等這些外圍業(yè)務的擴展方案,數(shù)據(jù)的存儲方案,最后還要有一個強大的數(shù)據(jù)分析平臺。七牛云通過 One Product 的理念,把各個環(huán)節(jié)以數(shù)據(jù)為線索,自然地串聯(lián)起來,讓開發(fā)者真正感受到一站式的接入體驗。