理解RTMP、HttpFlv和HLS的正確姿勢

需求比協議重要,理解你的需求在前,選擇應用的協議在后!

第一、是什么?

解釋這個問題有很大的難度,你所處的角度不同,決定了所需答案的不同。不管怎么樣,協議是為了解決問題而生的,它有著天然的指向性。同時,也有著它自身的局限。這三個協議的背后,有著一段凄美的愛情故事。我說說,你聽聽,在想當初….

千禧年的鐘聲敲響了,人們邁進了一個新的世紀。當時的移動和聯通還不能互發信息,手機是什么樣咱們心里也多少有點兒數。就在這樣的環境里,就在這樣一個網絡生存條件下,一小撮內心躁動的人開始不安了!它就是Macromedia。

Macromedia

對,就是它。不知道沒關系,這個公司就活到2005年。這是一個短命的公司,但它拿出了一個長命協議,影響了之后的網上生活,也為全民直播奠定了基礎。這就是RTMP,一個實時消息傳輸協議,一個讓在線看片成為可能得協議,一個讓東京.熱了的協議….

就這樣,一個新的時代開始了!

當時間撥到了2012年, Adobe 正式發布 RTMP specification v1.0 的時候。本以為拿著媒體服務的金鑰匙,可以在未來世界縱橫馳騁。但Adobe錯了,未來已來,但那是一個Html5的世界,一個不需要Flash的世界。

在這種大背景下,RTMP被替換是遲早的,不是它不帥,只是這個世界變化快!

HttpFlv的出現最早是2008年,從它的協議本身我們能看到Adobe的影子,就是flv協議本身。也可以說,httpflv是爭奪與放棄之間妥協的產物。人們再也不愿意看到Adobe,但又不得不面對海量Flv歷史文檔。在仇恨與無奈的交織中,httpflv誕生了。

HttpFlv 就是 http+flv ,將音視頻數據封裝成FLV格式,然后通過 HTTP 協議傳輸給客戶端。理解HttpFlv協議,這就話就是關鍵。

但聰明地你馬上就會發現,雖然傳輸協議變了,但在flv數據格式下,脫離FlashPlayer還是無稽之談。但在2016年,這一切都發生了改變,因為flv.js問世了!

Bilibili,也就是傳說中的B站,不僅貢獻了彈幕,為我們提供了另一種觀影交互體驗。更重要的,Flv.js的誕生,讓我們在視頻播放領域徹底告別Adobe時代。一個全新、干凈的HTML5就這樣向我們走來了。

關于HLS

現實世界就是這么殘酷,伴隨協議更迭的,是一個巨頭倒下,另一個巨頭崛起的故事。談HLS 就不得不談蘋果,談蘋果就不得不提喬幫主。

我總是不想刻意拔高一個人,但這逼 …. 哎,不說了。就記住吧,悲劇的開端,往往是榮耀的起點。是悲劇還是榮耀,只取決于你!

好,返回頭繼續說HLS,HLS就是“HTTP Live Streaming”的縮寫,它誕生自2009年,QuickTime和iPhone3GS黃金搭檔下的一個標準,一個意在顛覆流媒體產業的新協議。

它的工作原理簡單來說就是把一段視頻流,分成一個個小的基于HTTP的文件來下載。當媒體流正在播放時,客戶端可以根據當前網絡環境,方便地在不同的碼率流中做切換,以實現更好的觀影體驗。

HLS的出現是為了解決蘋果原生環境中的流媒體播放,這個協議可以方便地讓Mac和iPhone播放視頻流,不依賴Adobe,更不用去管什么標準委員會。依賴自己,永遠是最大力量的保障。


RFC 8216

但幸運之神就是這么奇怪,當它給你打開一扇門的時候,也在不經意間給你關上了一個。就蘋果來說,HLS經過10年的發展,RFC 8216發布了HLS的第七個版本。Adobe早已是昨日黃花,未來已來,這是一個Html5的世界。在視頻播放領域,全民直播已經開啟,這是一個實時性需求強于穩定性的播放環境。蘋果也跟曾經的Adobe一樣,猜中了故事的開始,卻踩空了這個故事的結局。

這也許就是商業世界最精彩的地方,即便你沖到萬億市值,對于未來而言,你我依然一無所知!

HLS 就先說到這,貼兩張 WIKI的截圖鎮樓,下一章的內容馬上開始。


HLS Usage
HLS Clients

第二、為什么

我始終認為,認識一個新的事務,不管它是無形的技術還是有型的實體,都要從正反兩面去觀察。在聚光燈下,它標榜的是什么?謝幕之后,它的無奈又是什么。只有這樣,才能保持我們的謙卑與疑惑,理性地分析,得到一個較為全面的認識。

在本小節,我將通過解答一個問題的過程,建立對這三個協議的基本認識。


兩端加一服

在開始之前,我先把流媒體服務中的雙端關系說一下。在一個完整的流媒體服務框架中,角色就是"兩端加一服"。推流端、拉流端加上媒體服務器。

同時按照應用場景的不同,協議又分:

  • 推流協議;
  • 拉流播放協議;

大部分教程在介紹這三個協議的時候,都忽略了一點,就是協議的應用場景到底是什么? RTMP 可以用在雙端,但 HLS 只能用在拉流端,記住這層關系。

帶著問題找答案:為什么RTMP比HLS快?

首先,這個問題發生在拉流端,協議也都是拉流協議。分別對RTMP和HLS的拉流播放進行抓包,能得到以下兩張截圖。


RTMP
HttpFlv

通過報文數據我們能看出:
? 在RTMP下,從Handshake到第一個VideoData用了700ms的時間;
? 在HLS下,從Get m3u8到response ts Data只有300ms!

問題來了,HLS的響應效率這么高,怎么就比RTMP還慢了呢?這都要從HLS的實現方案說起。

HLS拉流方案

在上圖的生產環境中,以RTMP協議推流,HLS拉流。端到端的時間消耗是:

  • RTMP 推流端的聯通成本是 700ms ,注意此時的 700 毫秒包含了 connect 和 send Video Data ;
  • 推流端聯通之后的時間成本,主要是采集編碼封包的成本,不需要再次connect;
  • HLS的請求響應成本是300ms;
  • flvto ts的成本,用ffmpeg切一個10秒的碼率500的視頻,算上磁盤的寫入時間最多 200ms;

所以說,HLS的慢的原因只有一個,就是等數據!

Get Frist m3u8

以 demo 中的這個 m3u8 來說,在直播的環境里媒體服務器要等到這 12 秒的數據推上來,我才有可能輸出。即使切片成本降為零,拉流端看到的數據也是12秒之前的內容。

能不能優化?能!
縮短ts間隔與個數,HLS也能做到3秒+的延遲。但這個結果也拼不過RTMP這種不需切片的解決方案。

第三、怎么選

當您真正了解這三個協議之后,對于選擇的問題我相信您已經有了自己的答案。我寫這篇博客的初衷,也是想以歷史背景入手,避免一上來就拋概念、甩結果。

希望我寫的這些內容對您能有幫助,視頻解決方案很復雜,它涉及的內容太多,在學習之初建立起清晰的脈絡至關重要。為他人易,為自己難!祝大家在多媒體服務上,選你所選,愛你所愛。


三協議小結

參考:
https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol
https://en.wikipedia.org/wiki/HTTP_Live_Streaming
http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
https://datatracker.ietf.org/doc/rfc8216/
https://www.villainhr.com/page/2017/08/05/RTMP%20H5%20%E7%9B%B4%E6%92%AD%E6%B5%81%E6%8A%80%E6%9C%AF%E8%A7%A3%E6%9E%90

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380