七牛直播云服务技术揭秘
以下根據(jù)七牛云首席布道師何李石現(xiàn)場演講內(nèi)容整理。
直播模型及其實現(xiàn)
一個通用的直播模型一般包括三個模塊:主播方、服務(wù)器端和播放端。
首先是主播方,它是產(chǎn)生視頻流的源頭,由一系列流程組成:
- 第一,通過一定的設(shè)備來采集數(shù)據(jù);
- 第二,將采集的這些視頻進行一系列的處理,比如水印、美顏和特效濾鏡等處理;
- 第三,將處理后的結(jié)果視頻編碼壓縮成可觀看可傳輸?shù)囊曨l流;
- 第四,分發(fā)推流,即將壓縮后的視頻流通過網(wǎng)絡(luò)通道傳輸出去。
其次是播放端,播放端功能有兩個層面,第一個層面是關(guān)鍵性的需求;另一層面是業(yè)務(wù)層面的。
先看第一個層面,它涉及到一些非常關(guān)鍵的指標,比如秒開,在很多場景當(dāng)中都有這樣的要求,然后是對于一些重要內(nèi)容的版權(quán)保護。為了達到更好的效果,我們還需要配合服務(wù)端做智能解析,這在某些場景下也是關(guān)鍵性需求。再來看第二個層面也即業(yè)務(wù)層面的功能,對于一個社交直播產(chǎn)品來說,在播放端,觀眾希望能夠?qū)崟r的看到主播端推過來的視頻流,并且和主播以及其他觀眾產(chǎn)生一定的互動,因此它可能包含一些像點贊、聊天和彈幕這樣的功能,以及禮物這樣更高級的道具。
我們知道,內(nèi)容產(chǎn)生方和消費方一般都不是一一對應(yīng)的。對于一個直播產(chǎn)品來講,最直觀的體現(xiàn)就是一個主播可能會有很多粉絲。因此,我們不能直接讓主播端和所有播放端進行點對點通信,這在技術(shù)上是做不到或者很有難度。主播方播出的視頻到達播放端之前,需要經(jīng)過一系列的中間環(huán)節(jié),也就是我們這里講的直播服務(wù)器端。
直播服務(wù)器端提供的最核心功能是收集主播端的視頻推流,并將其放大后推送給所有觀眾端。除了這個核心功能,還有很多運營級別的訴求,比如鑒權(quán)認證,視頻連線和實時轉(zhuǎn)碼,自動鑒黃,多屏合一,以及云端錄制存儲等功能。另外,對于一個主播端推出的視頻流,中間需要經(jīng)過一些環(huán)節(jié)才能到達播放端,因此對中間環(huán)節(jié)的質(zhì)量進行監(jiān)控,以及根據(jù)這些監(jiān)控來進行智能調(diào)度,也是非常重要的訴求。?
實際上無論是主播端還是播放端,他們的訴求都不會僅僅是拍攝視頻和播放視頻這么簡單。在這個核心訴求被滿足之后,還有很多關(guān)鍵訴求需要被滿足。比如,對于一個消費級的直播產(chǎn)品來說,除了這三大模塊之外,還需要實現(xiàn)一個業(yè)務(wù)服務(wù)端來進行推流和播放控制,以及所有用戶狀態(tài)的維持。如此,就構(gòu)成了一個消費級可用的直播產(chǎn)品。
但是正如剛才所說的直播通用模型一樣,實際上這里很多功能都可以抽象成一個通用功能,也就是說各家直播產(chǎn)品的需求和實現(xiàn)方式都類似。我們再來看,如果把這些抽象出來的需求交給七牛這樣的第三方去實現(xiàn),會有多大的差異。
七牛直播云解決方案
首先,對于推流端的功能,我們可以用一個 SDK 去覆蓋所有功能點,包括采集、處理、編碼和推流等工作,若有一些功能無法通過官方提供的 SDK 來滿足,可以通過自定義擴展的形式來實現(xiàn)。
其次,對于播放端,我們可以將其功能分類,和視頻播放相關(guān)的功能可以通過一個播放器 SDK 去實現(xiàn)。而其它功能如實時聊天,可以直接使用其它第三方服務(wù)。?
在直播服務(wù)器端,幾乎所有的工作都集中于如何更好的處理、分發(fā)視頻流,比如出于審核的目的對視頻進行自動鑒黃,為了更好的適配客戶端的網(wǎng)絡(luò)需要對視頻進行實時轉(zhuǎn)碼。?
我們發(fā)現(xiàn),對于這三個模塊,幾乎所有直播產(chǎn)品的訴求都是類似的。因此七牛提供了一個這樣覆蓋主播端到播放端的直播云解決方案,它包括推流端 SDK 和播放端 SDK,以及一個強大的直播網(wǎng)絡(luò),它既能滿足推流端和播放端在拍攝和播放方面的體驗訴求,也能夠通過定制化的方式來滿足在產(chǎn)品運營方面的訴求,比如給播放器加上彈幕和點贊等功能。
七牛直播云平臺主要包含直播云 API、推流端 SDK 和播放端 SDK 等三大模塊。接下來重點介紹七牛在推流端和播放端 SDK 方面的功能特性,以及它們在性能方面的表現(xiàn)。
SDK 功能特性
1)SDK?處理流程
如果把一個完整的直播流程用一個流水線來表達,它應(yīng)該是這樣子的,如下圖所示。
七牛?SDK 的開放性表現(xiàn)為兩點:
除了開放性,七牛也支持了 H.264 和 H.265?等多種編碼標準。H.265 是一種更為高效的編碼標準,能夠在同等畫質(zhì)效果下將內(nèi)容的體積壓縮得更小,傳輸時更快更省帶寬。?
視頻流編碼完成后,則進入另一個常規(guī)的流程,進行推流、分發(fā)和播放。這樣,我們就完成了一個完整的直播流程,它包含采集、處理、編碼、推流、分發(fā)和播放等子流程。其中每一個子流程都是可插拔可替換的,而所有流程的子模塊也都具有靈活開放的輸入輸出接口,子模塊可以被任意的擴展或者替換。
2)SDK?功能點對比
直播流程里面的模塊化處理方式中,每個子流程都包含一系列開放可擴展的子模塊,這些子模塊對應(yīng)多組不同的功能,以滿足各階段的需求。我們匯總了一些當(dāng)前主播、觀眾以及 App 實現(xiàn)者最關(guān)注的功能,大概有 36 種。從這張圖可以看出,目前七牛的推流端和直播端 SDK 中實現(xiàn)了多達 32 種功能。
3)SDK 包大小對比
但是,對于七牛直播服務(wù)來說,要做到這么開放,又具備這么多功能點,需要一個多大的 SDK 呢? 我們統(tǒng)計了一下,iOS 端的推流和播放 SDK 加起來,大概需要 5MB 左右,而業(yè)界的平均值則是 11MB。Android 端由于需要適配的硬件設(shè)備和軟件系統(tǒng)太多,SDK 的大小大概在 18MB 左右,業(yè)界的均值則在 42MB。
SDK 性能對比
我們提供了一個開放的 SDK 處理流程,在這個流程中每個環(huán)節(jié)都提供了非常豐富的關(guān)鍵功能,能夠滿足大部分場景下的需求,同時又保證了包含所有這些功能特性的 SDK 不會太大。那么,它在性能方面的表現(xiàn)如何呢??
1)資源占比?
除了程序 Bug 導(dǎo)致的主動崩潰之外,一個 App 的穩(wěn)定性主要由兩方面影響:內(nèi)存和 CPU,因此第三方 SDK 在這兩方面的表現(xiàn)將直接影響 App 的穩(wěn)定性。而對于一個視頻推流和播放 App 來說,CPU 是其最重要的資源之一。
我們先來看一下七牛 SDK 在 CPU 占比方面的情況。上下兩張圖分別是推流和播放 SDK 在經(jīng)過多次反復(fù)測試后得出的 CPU 占比均值曲線圖。從圖中可以看出,無論是推流端還是播放端,七牛 SDK 在 CPU 使用率方面都占比最少。
我們再來看一下內(nèi)存占比,上下兩圖也分別給出了推流和播放 SDK 在多次反復(fù)測試后得出的內(nèi)存占比均值曲線圖,從圖中可以看出,我們 SDK 在推流和播放的時候內(nèi)存使用情況表現(xiàn)非常平穩(wěn),而內(nèi)存的使用量也在業(yè)界均值之下,接近于最好的值。這個數(shù)據(jù)之所以沒有達到最好值,是因為我們經(jīng)過反復(fù)測試發(fā)現(xiàn)頻繁的對內(nèi)存進行回收(Android)會導(dǎo)致編碼的不穩(wěn)定,實際上這個指標確實可以優(yōu)化到最好,只不過可能會導(dǎo)致內(nèi)存和 CPU 波動較大,進而影響整個過程的編碼效率。對于這樣的權(quán)衡,我們大多數(shù)客戶也非常認可,這也是他們選擇我們的 SDK 原因之一,這點從我們 Github 庫上的關(guān)注度就可以看出。
2)耗電量對比
最后,我們再來看下在保證較好的推流效果和 App 穩(wěn)定性情況下,它需要消耗多少電量。這兩張圖是推流和播放 10 分鐘得到的平均電量消耗對比,從圖中可以看出,七牛 SDK 在推流和播放情況下所需電量都是最小的,推流和播放分別只需要占用 App 總電量的 1.7% 左右(三星 S6 手機)。
總結(jié)
前面分享了這么多功能和性能的對比,我們再來回顧一下所有這些對比到底說明了什么:?
首先,我們提供開放可插拔的模塊化組件,整個采集、處理和編碼過程都是非常開放的,每個模塊都可以非常方便的替換或者擴展。?
其次,SDK 是開放性的,能夠方便地整合所有推流設(shè)備。我們認為所有端都應(yīng)該平等地享受七牛的直播云服務(wù),因此幫助所有端接入也是我們的服務(wù)宗旨之一。?
最后,可量化的指標才有改善的空間,我們將幾乎所有指標都量化成指導(dǎo) SDK 性能優(yōu)化的數(shù)據(jù),準確跟蹤服務(wù)客戶的質(zhì)量,長期堅持不懈的改進 SDK 易用性、性能以及后端支撐網(wǎng)絡(luò)的效率。也即,優(yōu)化到極致的推流播放性能和編解碼控制。
原文發(fā)布時間為:2016-07-11
本文來自云棲社區(qū)合作伙伴“Linux中國”
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的七牛直播云服务技术揭秘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel提取文字拼音首字母
- 下一篇: 基于51单片机的双机通信系统设计prot