一只視頻程序猿的移動直播SDK初體驗

本文轉自一只視頻程序猿的移動直播SDK初體驗,此處僅做排版改動。

今早老板召開站會,“移動直播這么火,市面上有一百多個APP,小斌,你下周交個原型APP瞅瞅!”

小弟心中一萬匹草泥馬奔過,這玩意兒哪兒是幾天就能弄出來的?問候歸問候,咱還是趕緊調研吧,端午還約了妹子游泳呢。

方案選項

作為公司音視頻大神,對流媒體基本概念還是OK的。咱首先看看市面上火熱的某客、某椒APP怎么工作的。主播端推流使用RTMP推向流媒體源站,服務器內部通過RTMP協議多級拉流至邊緣CDN節點,播放端從邊緣CDN節點獲取直播內容,大致如下圖:
這里寫圖片描述

其中上行RTMP推流很普遍了,很多游戲直播都使用obs推RTMP流。
在整個過程中,涉及很多流媒體的基本概念,先說說GOP。
GOP即Group of picture(圖像組),指兩個I幀之間的距離。即幾秒有一個關鍵幀。分析線上主流的移動直播APP,大都在2、3秒之間。
這里寫圖片描述

一般的云服務公司都會提供多種協議的拉流方式,優缺點如下:

  • HLS協議,移動h5瀏覽器支持較好,但是延遲較大。移動端播放前需要產生三個分片,每個分片至少得是一個GOP。一個GOP即使是2秒,也意味著這個環節耗費了6秒的延時。
  • RTMP協議,需要訪問1935端口,支持雙向互動,實時性很好,PC flash原生支持。
  • HTTP-FLV,不支持雙向互動,實時性和RTMP協議一致。

基于以下幾點理由,小弟準備采用HTTP-FLV作為拉流協議:

  • 國內網絡情況的惡劣程度,并不是每個網絡防火墻都允許1935包通過。
  • RTMP協議和HTTP-FLV,實際傳輸的內容都是相同的FLV,實時性也一樣。
  • RTMP協議握手方式比HTTP復雜。

確定好了拉流協議,再看看推流側依賴的參數。

  • FPS,每秒編碼傳輸的視頻幀數;
  • 碼率,每秒編碼傳輸的音視頻比特數;
  • GOP,關鍵幀間隔;
  • 分辨率。

在相同碼率的情況下,FPS和分辨率越大,視頻的圖像質量越差。為了平衡主播上行帶寬、用戶觀看下行帶寬和圖像質量的關系,需要很好處理這幾個值。

SDK下載

首先,Android/iOS系統上,并不包含RTMP推流組件,這塊需要自己開發。系統自帶的播放器也不支持flv文件的播放。小弟只能去阿里云、騰訊云、百度云、金山云等大牛云服務公司找解決方案了。把每個帳號都注冊一遍,大致情形如下。

這里寫圖片描述

其中,騰訊云ILVB實名認證后需要人工審核5個工作日,反正至今沒有看到SDK。
更令人震驚的是,雖然阿里云提供多媒體云服務,但是至今尚未提供移動直播SDK。
總體來說,開放較好的是金山云,SDK放到了github上,每次change log都很清楚,幾乎每周都有更新。 騰訊云就有些猶抱琵琶半遮面,給SDK試用都不痛快。

SDK功能對比

拿到SDK,首先對比一下相關功能。其中騰訊云LVB直播只提供了播放SDK,還僅只支持HLS播放,這個方案首先撲街。ILVB互動直播未拿到SDK,暫且不表。這樣一來,可供選擇的大型云服務商的方案就剩下金山云和百度云。

移動直播SDK涉及的功能比較多,我先解釋一下幾個基本功能點:

  • 推流編碼,涉及軟件編碼和硬解編碼。相同碼率,軟編圖像質量更清晰,但是耗電更高;
  • 網絡自適應,當網絡抖動時根據網絡情況調整發送速率;
  • 美顏,對主播圖像進行美白、液化、磨皮等處理;
  • 混音,當主播聊天時,可以把背景音樂混到音視頻里面;
  • 播放視頻旋轉,可以根據視頻寬高,決定橫屏還是豎屏播放;
  • 直播重加載,當播放狀況不佳時,重新拉流播放。

為了對比其他方案,做了幾張表格。

Android推流功能列表如下:

這里寫圖片描述

從表中可以看到,

  • 百度云接口還很粗糙,連移動直播必選的美顏功能都不支持,首先淘汰。
  • 小弟想有噪聲抑制功能,但是這些SDK都沒有支持,不過令人欣喜的是,金山云支持自定義音頻數據處理,可以把自己的噪聲抑制代碼掛載進去。
  • 相比而已,金山云的接口較開放。其中金山云SDK支持的功能更豐富些,能滿足當前移動直播的要求。

iOS推流功能列表如下:
這里寫圖片描述

  • 從表中可以看出,iOS推流功能豐富程度普遍較高,這和市面上主播大量使用iPhone推流有密切關系。
  • 從特色功能來看,只有金山云支持畫中畫和美聲功能。
  • 自定義濾鏡和原始數據處理,體現了SDK的開放程度,這方面百度云是嚴重失分的。
  • 在細節功能上,對聲音和美顏的處理,體現了當前SDK對移動直播市場的重視程度。

Android播放功能列表如下:
這里寫圖片描述

iOS播放功能列表如下:
這里寫圖片描述

播放端關注點和推流端還有些不一樣,播放側除了考慮功能豐富以外,還需要考慮穩定性、功耗、包大小、開播速度等,靜態對比可以作為參考。金山云支持直播重加載,能有效降低播放卡頓率。

總結一下,通過試用大型云服務商的移動直播SDK,得出以下結論:

  • 能完全運行起來的是金山云、百度云提供的SDK。騰訊云、阿里云尚未提供真正可用的移動直播SDK。
  • 從Android/iOS推流功能以及播放功能來看,金山云提供的功能最為豐富。
  • 百度云提供的推流功能還比較簡單,離市面的要求有些距離。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450066.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Xilinx zynq-7000系列FPGA移植Linux操作系統詳細教程

Xilinx zynq-7000系列FPGA移植Linux操作系統詳細教程 一:前言 最近手上壓了一塊米聯客的Miz7035,一塊xilinx zynq-7000系列的開發板,想著正好學習一下linux在ARM9上的移植,網上基本都是ZC702、zed的教程,這對于買了非標…

程序員的創業困境 誰來幫助出出主意?

【編者按】有人說,程序員是吃青春飯的,到一定年齡就得考慮轉行,也有人選擇自己創業。而當創業使你偏離了之前持續學習專業知識的軌道時,你會選擇在創業路上繼續堅持還是回歸自己的老本行?編程編了十幾年的Dan McComas半…

節選—Android 視頻直播 ( 從快播到直播,從高清到無碼 )十年視頻開發項目

本文轉載自Android 視頻直播 ( 從快播到直播,從高清到無碼 )十年視頻開發項目,截取其中技術概念比較相關的部分,并做了重新的排版。 視頻和直播的準備: android-java層:camera相關(視頻&#x…

getDeclaredMethod和getMethod的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 getDeclaredMethod*()獲取的是類自身聲明的所有方法,包含public、protected和private方法。getMethod*()獲取的是類的所有共有…

12.5PMP試題每日一題

在什么情況下項目正式受控于實施整體變更控制過程:A、從項目啟動到收尾的所有過程B、只有當項目基準建立之后C、在項目基準建立之前D、只要有人提起變更請求的時候 作者:Tracy19890201(同微信號) 答案將于明天和新題一起揭曉&…

在線預覽word,excel文檔

Google Doc 示例:https://jsfiddle.net/7xr419yb/ Microsoft Office 示例:https://jsfiddle.net/gcuzq343/轉載于:https://www.cnblogs.com/alexguoyihao/p/10314626.html

如何遷移整個git倉庫

轉自準備更換git托管,如何遷移原git倉庫一個回答 如果你想從別的 Git 托管服務那里復制一份源代碼到新的 Git 托管服務器上的話,可以通過以下步驟來操作。 從原地址克隆一份裸版本庫,比如原本托管于 GitHub。 git clone –bare git://githu…

關于創業:希望有人在N年前就告訴我的一些事兒

【編者按】原文作者為前微軟員工、創業家Amir Khella,他離開微軟后開始自主創業,并成功創辦了多家公司。他經常在博客中分享自己的創業故事和經驗。以下是其中一篇博文,他認為創業者想要成功,首先需要找到自己的方向,再…

Rust核心團隊前成員Brian Anderson加入PingCAP

昨天,國內新型分布式數據庫公司PingCAP聯合創始人兼CEO劉奇在朋友圈宣布,Rust核心團隊前成員Brian Anderson將加入公司。PingCAP聯合創始人兼CTO黃東旭進一步向InfoQ記者證實了此消息,并透露Brian將從事TiKV相關的工作,從存儲引擎…

JeeSite 是什么、概述

見JeeSite官網:http://jeesite4.mydoc.io/ 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 總體概述 快速訪問 JeeSite 官網地址:http://jeesite.comJeeSite 在…

單機單網卡最大tcp長連接數真的是65535嗎?

很早微博上一直討論比較多的問題,這里轉載個知乎的答案:單機單網卡最大tcp長連接數真的是65535嗎? 作者:許懷遠 鏈接:https://www.zhihu.com/question/66553828/answer/244313925 來源:知乎 著作權歸作者…

觀察者模式-Observer Pattern

1.主要優點 觀察者模式的主要優點如下: (1) 觀察者模式可以實現表示層和數據邏輯層的分離,定義了穩定的消息更新傳遞機制,并抽象了更新接口,使得可以有各種各樣不同的表示層充當具體觀察者角色。 (2) 觀察者模式在觀察目標和觀察者…

賭還是不賭 你應該辭職去創業嗎?

【編者按】本文的作者是Amir Khella,他是一位著名的用戶體驗設計師,也是創業顧問和企業家。在過去的三年里,他成功的打造了十幾家公司,其中不少還被大企所收購,比如說Google收購了他的DocVerse,LimeLight N…

Python 深淺copy 和文件操作

深淺copy 1,先看賦值運算。 l1 [1,2,3,[barry,alex]] l2 l1l1[0] 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2) # [111, 2, 3, [wusir, alex]] 對…

這樣安靜下去...

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我從來就不想要整個世界,我只想這樣安靜下去 ... 放肆我所有癡狂的心愿,無怨無悔 ... 縱我一執燃燒后成灰的稻草…

C# 實現生成帶二維碼的專屬微信公眾號推廣海報

原文:C# 實現生成帶二維碼的專屬微信公眾號推廣海報很多微信公眾號中需要生成推廣海報的功能,粉絲獲得專屬海報后可以分享到朋友圈或發給朋友,為公眾號代言邀請好友即可獲取獎勵的。海報自帶渠道二維碼,粉絲長按二維碼即可關注微信公眾號&…

Android應用開發—PendingIntent:如何判斷兩個PendingIntent對等

摘錄自:PendingIntent詳解 如何判斷兩個PendingIntent對等: 兩個PendingIntent對等是指它們的operation一樣, 且其它們的Intent的action, data, categories, components和flags都一樣。但是它們的Intent的Extra可以不一樣。 主要常量 FLAG_CANCEL_CUR…

最新研究顯示人類智力逐漸下降且變得更愚蠢

請大家去測試智力,看看是否正常水平?真的,智力在下降,在網絡、電子設備和化肥、農藥,轉基因等因素下,人越來越差了。 保存到相冊研究人員稱現代人類將逐漸智力下降,這是因為我們不再需要智力來維…

缺陷的背后---LIMIT M,N 分頁查找

一、問題發現篇 最近組內做了一次典型缺陷分享時,翻閱2018年的缺陷,找到了一個讓我覺得“有料”的bug(別的同事測試發現的),先大致簡單的描述下這個問題: 需要實現的功能:從一個DB庫同步某一段時…

Android應用開發—Intent組件詳解

轉載自:Android中Intent組件詳解 Intent是不同組件之間相互通訊的紐帶,封裝了不同組件之間通訊的條件。 Intent本身是定義為一個類別(Class),一個Intent對象表達一個目的(Goal)或期望(Expectation),敘述其所期望的服務或動作、與…