一對一直播軟件開發中,如何進行推流?

推流環節對直播鏈路的影響非常大,如果推流網絡不穩定,就算前期在音視頻處理、編碼和封裝上做何種優化,用戶體驗都會很糟糕。因此接下來,小編就以一對一直播軟件開發爲例,爲大家講述下推流過程中涉及的協議、實現方案等。

更多Android高級面試合集放在github上面了(更多面試文檔,項目下載,源碼)
https://github.com/xiangjiana/androids
需要更多項目下載,源碼的小夥伴可以點擊關於我 聯繫我獲取

一、推流的定義

推流實際上就是在把封裝好的視頻和音頻傳輸到服務器的過程。換句話說,就是將現場的視頻信號傳到網絡的過程。此外,推流這個環節對網絡的要求比較高,如果網絡不穩定,直播的效果就會很差,像是遇到卡頓、延時等情況。

二、推送協議種類

根據使用案例,一對一直播軟件開發中,接觸到的推送協議有以下幾個:

1、RTMP
RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基於TCP,是一個協議族,包括RTMP基本協議及RTMPT、RTMPS、RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash平臺和支持RTMP協議的流媒體之間進行音視頻和數據通信。支持該協議的軟件包括Adobe Media Server、Ultrant Media Server、red5等。

RTMP是目前主流的流媒體傳輸協議,廣泛用於直播領域,可以說市面上大多數的直播平臺都應用了這個協議。優點:CDN廠商基本都支持此協議,兼容性強,且在各平臺上實現容易。缺點:傳輸成本高,在弱網環境下比較容易丟包;不支持瀏覽器推送;最重要的一點是RTMP是Adobe的私有協議,但是Adobe已經不再更新。
一對一直播軟件開發

2、WebRTC
WebRTC,即網頁即時通信的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的API。它目前已經開源並且在Google、Mozilla、Opera支持下被納入萬維網聯盟的W3C推薦標準。相對於一對一直播軟件,它更多的是廣泛應用在各種視頻會議中。此協議的優點是:由於是納入W3C標準,主流瀏覽器對它的支持逐漸提高,相比起RTMP來講,它在弱網情況下的空間優化較大,而且支持點對點通信,從而降低了整體延遲。但是缺點也比較棘手,就是目前傳統CDN中沒有類似的服務提供。
一對一直播軟件開發

3、基於UDP的私有協議
有些一對一直播軟件開發商會使用UDP作爲底層協議開發自己的私有協議,因爲UDP在弱網環境下,通過一些定製化的調優可以達到比較好的弱網優化效果,但同樣因爲是私有協議也勢必會有現實問題:開發成本高,往往需要自建CDN或者和CDN達成協議,另外由於兼容性較差,在面對升級時可能得不到技術支持。

三、推流實現方案舉例

1、在推流傳輸方面全部由開發商自己搭建,花費較大,總體來說不太現實。
2、在直播軟件開發中,可以和一些主流CDN廠商或者雲視頻服務商合作,它們往往會提供推流的「一條龍」服務。
3、大多數直播平臺都會同時接入多個視頻雲服務提供商,這樣可以做拉流線路互備,對推流後視頻集羣再進行優化也可提高直播的流暢性和穩定性。
以上,就是一對一直播軟件開發中,一些關於推流的簡單介紹

關於我

更多Android高級面試合集放在github上面了

需要的小夥伴可以點擊關於我 聯繫我獲取

非常希望和大家一起交流 , 共同進步

目前是一名程序員,不僅分享 Android開發相關知識,同時還分享技術人成長曆程,包括個人總結,職場經驗,面試經驗等,希望能讓你少走一點彎路。