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 Plugin,Server的名詞我有看到 PHP Streaming、Pseudo 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 Draft,client player還沒有廣泛支援。
留言