HTTP Streaming 相關技術 pseudo, live

HTTP Streaming Video 相關技術

最近想研究一下HTTP Streaming,隨著網路架構越來越完整,這應該是個趨勢。剛看的時候有一堆名詞,下面紀錄一下我的理解。

l   HTTP Streaming (Progressive Streaming)
n   一般如果寫HTTP Streaming的話,指的就是Progressive Streaming。這種架構,用單純的Web Server就可以了,其實他就是像一般Web Server傳照片、檔案一樣。Client就一直收,只是某些格式的影片,是可以收到就可以立刻播出來的,例如微軟的asf, wmv?
n   優點就是相對於之前的RTP Streaming的技術,目前的高畫質影片可能家庭的網路還不夠快,如果用UDP的話,可能畫面會破碎嚴重,用TCP的話,就可以看的漂亮,當然要等比較久一點
n   缺點
u  使用者無法seek,因為檔案是從頭開始傳到尾的,你沒辦法叫他中間跳過不傳。雖然HTTP Protocol支援Partial download,但因為client無法知道某個秒數對應到的開始位元是多少,所以無法使用partial download的方法。
u  無法適用於 Live broadcasting,現場直播
l   HTTP pseudo Streaming
n   這是FLV使用的方式,基本上我還是把這個規類到跟Progressive Streaming一樣,但他多了可以Seek的功能,怎麼做到的呢?需要先用轉檔程式把影片編成flv,此時flv裡面的metadata會帶有索引資訊,索引的格式就是 1 sec -> 1234 KB, 2 sec -> 5422 KB ……。類似這樣,秒數的地方應該是Key Frame的位置。所以當使用者要快轉的時候,player會找到最近的索引秒數,然後轉換為 byte數,接下來就送出 xxx.flv?5422。這樣就會seek到兩秒的地方。如果是mp4的話參數則是直接帶秒數,ex: mp4?1s 。我看到的是YouTube使用的就是這種方式。索引的資訊可以用一個工具metaviewer看到,如果編碼的時候沒有說要產生索引資訊,那client player就不能seek了。
n   優點:可以seek了,可以有高畫質。
n   缺點:
u  需要額外的Server PluginServer的名詞我有看到 PHP StreamingPseudo Streaming,就是幫Apache加一個外掛,讓他可以處理flv, mp4 的需求。player也要相對應的修改。
u  無法適用於 Live broadcasting,現場直播
u  RTMP比較,少了安全性
l   HTTP Live Streaming
n   這是Apple提出的解決方案,iOS 3之後都內建,目前提交到IETF Draft了。他的架構也是用一般的web server就可以解決,需要處理的反而是前置作業。是透過playlist來跟client溝通。使用者必須先把要播的影片丟給切割程式,程式會把影片切成n秒鐘一段的很多小影片(n 建議為 10),然後順便產生一個 m3u8 playlist,紀錄這一部影片有哪些片段。
n   所以client會透過HTML5 video tag,抓到 src m3u8 的內容,內容為
u  #EXTM3U
u  #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
u  gear1/prog_index.m3u8
u  #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
u  gear2/prog_index.m3u8
u  #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
u  gear3/prog_index.m3u8
u  #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
u  gear4/prog_index.m3u8
n   上面我們可以看到,使用者可以自訂要播哪一種頻寬的影片,預設是抓第一個gear1/prog_index.m3u8。所以就再去抓,內容為
u  #EXTM3U
u  #EXT-X-TARGETDURATION:10
u  #EXT-X-MEDIA-SEQUENCE:0
u  #EXTINF:10, no desc
u  fileSequence0.ts
u  #EXTINF:10, no desc
u  fileSequence1.ts
u 
u  #EXTINF:1, no desc
u  fileSequence180.ts
u  #EXT-X-ENDLIST
n   看到#EXT-X-ENDLIST,代表這是一個 Video On demand,所以可以算出整個影片的長度是多少,如果使用者要seek的話,就再去抓該位置的影片。如果沒有#EXT-X-ENDLIST,代表這是一個broadcasting的播放,就要再一直更新 m3u8,看有沒有新的片段加進來。
n   目前我用chrome是無法播此類型m3u8,但直接抓取每一個ts檔案是可以播的 (ts transport )Apple規定如果是這種方式,一定要使用H.264 Profile AAC 編碼。文件有提到抓取每一個小檔案之後會先合併再播放,看起來iOS 3 以上的Safari 都有做這樣。
n   優點:
u  可以seek
u  可以有高畫質
u  透過一般的Web Server來服務,可以簡單的部署到CDN (Content Delivery Network)
u  可以live broadcasting,現場直播。
n   缺點:
u  Draftclient player還沒有廣泛支援。

留言

這個網誌中的熱門文章

好貴的東元冷氣維修--馬達啟動電容

台大醫院 婁培人 耳鼻喉科 就診

機車無法充電之整流器壞掉--$650