如何從 0 到 1 開發一款完整的直播 App

zscw4586 8年前發布 | 19K 次閱讀 七牛 安卓開發 移動開發

編者按: 隨著移動互聯網的發展,越來越多的人選擇用手機來看直播。一款直播 App,需花費多少力氣解決技術問題?市面上有哪些成熟的方案可以直接借鑒?如何把這些方案結合在一起并解決問題?9 月3 日,在七牛云舉辦的架構師實踐日上,七牛直播云工程師陶澤宇,對怎樣完美解決視頻企業的三高之痛帶來了全新視角。以下是對他演講內容的整理。

開發一個直播 App 包含哪些部分 

iOS / Android  客戶端

Web  端播放器

業務服務器

分發網絡

七牛直播云針對 iOS / Android  客戶端做了怎樣的優化

iOS / Android 客戶端包含采集、音視頻處理、編碼和連麥功能。

采集:通過手機的麥克風和攝象頭把音視頻采集到一起。必須為 Android 和 iOS 各做一套采集方案。

音視頻處理:采集后的音視頻不能直接推流,必須對采集的音視頻數據進行處理。比如,視頻數據每秒鐘要處理 25 到 30 幀的圖片,這對 CPU 的消耗非常大。此外,視頻處理方面,主播美顏是一個剛需,此外還必須給視頻打上水印。音頻方面也有很多東西是可做的,比方說音效,如混響效果可以讓主播的聲音聽起來更有磁性。此外如果想要讓主播可以表演唱歌,則需要講伴奏的音頻文件和主播的聲音進行混音。為了更好的體驗,返聽功能也可以做。

編碼:在直播推流進行編碼時,盡量采用硬編,這可以減少 CPU 占用率,間接可以減少手機的發熱量和耗電量。為了保證在所有設備上我們都可以進行編碼,還需要準備一個軟編方案,當某種機型上無法使用硬編,則立即還成軟編。

連麥:作為觀眾給主播反饋的重要形式,可以極大豐富觀眾直播體驗。比如,主播在表演節目時,觀眾想和主播對話,主播就會彈出一個邀請,要求連麥觀眾的畫面就會出現在主播屏幕右下角的小窗上,所有的觀眾都可以看到這個場景。傳統的直播采取的是主播一對多的推流的方式,而連麥可以做到多對多推流,這個功能非常受歡迎。連麥可以做出很多豐富的形式,例如主播與主播進行 PK,觀眾把屏幕橫過來后,可以看到屏幕左邊是一個主播的圖象,右邊是另外一個主播的圖象 。

分發網絡

對于分發網絡結構的選擇,常見的是樹狀的分發網絡,比如 CDN 就是一種樹狀分發網絡。

圖 1

以圖 1為例,演示 CDN 。圖中每個白色節點對應某一個地方的機房。這種結構中,節點之間的等級有層次之分。

推流通常是由中央向邊緣節點推,比如從左側開始推流到中心節點,然后再經過中心節點分發到全國各地的邊緣節點,觀眾就能夠觀看直播。 

這種傳統的 CDN 樹型分發網絡比較常見,但是不一定適應現在這種主播數目越來越多的趨勢。

與十年前相比,只有電視媒體可以做直播。直播的參與者也都是專業的主持人。但是,現在人們只需要一臺手機就可以做直播了。換句話說,直播這個事,參與的門檻越來越低是一個趨勢。

這種趨勢帶來的影響有兩個:

1. 主播的數量越來越多,造成推流節點里的人會越來越多;

2. 對于某個主播的觀眾而言,不再局限于某一個區域,而是分布在全國各地。

這樣一來,樹狀分發網絡的中心節點將成為整個網絡的瓶頸。因為大量的主播的推流幾乎不可避免地經過中心節點,而中心節點一旦故障則會影響全局。

為了解決這個問題,可以選擇網狀的分發網絡來代替樹狀的分發網絡。

如何從 0 到 1 開發一款完整的直播 App

圖 2

以圖 2 為例,演示分發網絡,與樹狀網絡一個最大的區別是節點對等。直播線路是靠節點之間的地理關系、資源負載、網絡質量形成調度依據繪制最優線路。相對于 CDN 樹狀網絡,一個很明顯的特性是分發網絡沒有中心節點,做到了去中心化,以此規避因中心節點網絡波動導致片區故障。這種網絡更加適合做直播,七牛云的實時流分發網絡采用的也是這種網狀結構。

開發一款完整的直播 App 在客戶端涉及到一些技術問題以及分發網絡要解決,但采用七牛的直播云 SDK 和 LiveNet 將會省去很多麻煩。因為七牛的直播云 SDK ,針對的就是 Android 和 IOS 移動客戶端,而 LiveNet  相對于傳統的 CDN 采取的是智能調度與分發。

此外,七牛直播云 SDK 可以從 LiveNet 獲取離設備最近的幾個邊緣節點的網絡狀態,從而挑選一個最好的節點來進行推流和播放。這類似于出門之前在手機上看看城市交通狀況,選一條最不擁堵的路出行。這不但可以保持本設備擁有優質的網絡資源,同時對于整個網絡的各個節點均攤負載也是有利的。

但是,有了這些功能還遠遠不夠。

直播是一種轉瞬即逝的東西,播完了就沒了,這種東西如何做運營呢?這其實就涉及如何把直播內容存儲起來的問題。對此,七牛云可以提供云存儲服務,它可以方便地把直播的內容存儲下來,以供點播和回放。

此外將直播內容抽幀成一組圖片,然后利用七牛數據處理平臺的圖片鑒黃鑒暴恐服務,就可以對直播進行鑒黃和鑒暴恐。

總結 

圖 3

以圖  3 為例,演示七直播云 SDK 和 LiveNet 的關系。左邊的部分代表七牛直播云 SDK ,右邊深綠色的部分代表 LiveNet 網絡,橙色部分是我們自己的業務服務器,它可以通過七牛的 Server 端 SDK 與 LiveNet 進行通訊。

如何從 0 到 1 開發一款完整的直播 App

圖 4

以圖  4 為例,演示七牛直播云 SDK 播放端如何從 LiveNet 把直播流播放出來。

圖 5

以圖  5 為例,演示七牛云存儲,如何與七牛直播云 SDK 結合,從而實現點播、回放功能。

圖 6

以圖6 為例,演示七牛處理的服務。

開發一款完整的直播App,七牛的很多產品都可以直接使用,并且直接使用七牛產品付出的代價是最小的。

 

來自:http://blog.qiniu.com/archives/7006

 

 本文由用戶 zscw4586 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!