流媒體協議flv

What is HTTP FLV

所有的HTTP FLV流都是一個HTTP FLV地址,譬如:http://o***s.net:8081/live/livestream.flv,但是,流的形式卻至少有三種:

  1. FLV文件,漸進式HTTP流。放一個文件到nginx目錄,可以訪問下載在播放器播放,這是HTTP FLV文件,也就是漸進式下載流。所謂漸進式下載,也就是用戶觀看時無法從未下載的地方開始看。

  2. FLV僞流。一般說的HTTP FLV,比上面的漸進式流高級一點,譬如,一個120分鐘的電影,作爲漸進式流播放時,用戶需要從60分鐘開始看,如何支持呢?因爲nginx是當做文件下載的,無法直接跳轉到第60分鐘(nginx也不知道60分鐘對應的字節偏移是多少呀)。後來有人就支持這種跳着播放,通過指定時間服務器從指定的位置開始給流,這種支持flv?start=,就是http flv的僞流,本質上還是點播流。

  3. FLV直播流。SRS所指的HTTP FLV流,是嚴格意義上的直播流,有RTMP的所有特徵,譬如集羣、低延遲、熱備、GOP cache,而且有HTTP的優勢,譬如302、穿牆、通用。由於SRS內部實現了HTTP服務器,所以SRS是在邊緣將RTMP流轉換成HTTP流,SRS集羣內部還是使用RTMP分發。當前唯一將RTMP和HTTP協議都解析的服務器,目前只有SRS和nginx-rtmp,可惜nginx-rtmp沒有實現這個流。

用一句話概括,SRS的HTTP FLV就是增強的RTMP,真正的實時流媒體分發。

Confuse HTTP FLV

SRS的HTTP FLV容易和下面的幾種分發方式混淆:

  1. RTMPT:這個實際上是最接近SRS的HTTP FLV的概念的。但是從本質上來講,rtmpt是基於HTTP的RTMP,所以還是RTMP而不是FLV。

  2. HDL/HFL:國內一些廠家的HXX流,就是FLV流,主要和SRS的區別在於服務器集羣內部SRS還是走RTMP,所以延遲可能會有很大差異。SRS的HTTP FLV和RTMP延遲一樣,0.8-3秒。

  3. HDS:這個差的太遠了,不是一個東西。HDS和HLS像,但是HTTP FLV和他們兩個都完全不像。

Why HTTP FLV

爲何要整個HTTP FLV出來呢?當下HTTP FLV流正大行其道。主要的優勢在於:

  1. 互聯網流媒體實時領域,還是RTMP。HTTP-FLV和RTMP的延遲一樣,因此可以滿足延遲的要求。

  2. 穿牆:很多防火牆會牆掉RTMP,但是不會牆HTTP,因此HTTP FLV出現奇怪問題的概率很小。

  3. 調度:RTMP也有個302,可惜是播放器as中支持的,HTTP FLV流就支持302方便CDN糾正DNS的錯誤。

  4. 容錯:SRS的HTTP FLV回源時可以回多個,和RTMP一樣,可以支持多級熱備。

  5. 通用:Flash可以播RTMP,也可以播HTTP FLV。自己做的APP,也都能支持。主流播放器也都支持http flv的播放。

  6. 簡單:FLV是最簡單的流媒體封裝,HTTP是最廣泛的協議,這兩個到一起維護性很高,比RTMP簡單多了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章