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