以下大家友情支持一下:
做了一个产品,需要人气支持一下,android和iphone上91市场搜索#super junior粉丝团#,或者直接到页面下载http://m.ixingji.com/m.html?p=X16,大家帮忙捧捧场
最近想研究一下HTTP Streaming,隨著網路架構越來越完整,這應該是個趨勢。剛看的時候有一堆名詞,下面紀錄一下我的理解。
HTTP Streaming (Progressive Streaming)
一般如果寫HTTP Streaming的話,指的就是Progressive Streaming。這種架構,用單純的Web Server就可以了,其實他就是像一般Web Server傳照片、檔案一樣。C ient就一直收,只是某些格式的影片,是可以收到就可以立刻播出來的,例如微軟的asf, wmv?。
優點就是相對於之前的RTP Streaming的技術,目前的高畫質影片可能家庭的網路還不夠快,如果用UDP的話,可能畫面會破碎嚴重,用TCP的話,就可以看的漂亮,當然要等比較久一點
缺點
使用者無法seek,因為檔案是從頭開始傳到尾的,你沒辦法叫他中間跳過不傳。雖然HTTP Protoco 支援Partia down oad,但因為c ient無法知道某個秒數對應到的開始位元是多少,所以無法使用partia down oad的方法。
無法適用於 ive broadcasting,現場直播
HTTP pseudo Streaming
這是F V使用的方式,基本上我還是把這個規類到跟Progressive Streaming一樣,但他多了可以Seek的功能,怎麼做到的呢?需要先用轉檔程式把影片編成f v,此時f v裡面的metadata會帶有索引資訊,索引的格式就是 1 sec -> 1234 KB, 2 sec -> 5422 KB ……。類似這樣,秒數的地方應該是Key Frame的位置。所以當使用者要快轉的時候,p ayer會找到最近的索引秒數,然後轉換為 byte數,接下來就送出 xxx.f v?5422。這樣就會seek到兩秒的地方。如果是mp4的話參數則是直接帶秒數,ex: mp4?1s 。我看到的是YouTube使用的就是這種方式。索引的資訊可以用一個工具metaviewer看到,如果編碼的時候沒有說要產生索引資訊,那c ient p ayer就不能seek了。
優點:可以seek了,可以有高畫質。
缺點:
需要額外的Server P ugin,Server的名詞我有看到 PHP Streaming、Pseudo Streaming,就是幫Apache加一個外掛,讓他可以處理f v, mp4 的需求。p ayer也要相對應的修改。
無法適用於 ive broadcasting,現場直播
跟RTMP比較,少了安全性
HTTP ive Streaming
這是App e提出的解決方案,iOS 3之後都內建,目前提交到IETF Draft了。他的架構也是用一般的web server就可以解決,需要處理的反而是前置作業。是透過p ay ist來跟c ient溝通。使用者必須先把要播的影片丟給切割程式,程式會把影片切成n秒鐘一段的很多小影片(n建議為 10),然後順便產生一個 m3u8 的p ay ist,紀錄這一部影片有哪些片段。
所以c ient會透過HTM 5的 video tag,抓到 src為 m3u8 的內容,內容為
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8
上面我們可以看到,使用者可以自訂要播哪一種頻寬的影片,預設是抓第一個gear1/prog_index.m3u8。所以就再去抓,內容為
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, no desc
fi eSequence0.ts
#EXTINF:10, no desc
fi eSequence1.ts
…
#EXTINF:1, no desc
fi eSequence180.ts
#EXT-X-END IST
看到#EXT-X-END IST,代表這是一個 Video On demand,所以可以算出整個影片的長度是多少,如果使用者要seek的話,就再去抓該位置的影片。如果沒有#EXT-X-END IST,代表這是一個broadcasting的播放,就要再一直更新 m3u8,看有沒有新的片段加進來。
目前我用chrome是無法播此類型m3u8,但直接抓取每一個ts檔案是可以播的 (ts為transport )。App e規定如果是這種方式,一定要使用H.264 Profi e跟 AAC 編碼。文件有提到抓取每一個小檔案之後會先合併再播放,看起來iOS 3以上的Safari 都有做這樣。
優點:
可以seek
可以有高畫質
透過一般的Web Server來服務,可以簡單的部署到CDN (Content De ivery Network)
可以 ive broadcasting,現場直播。
缺點:
Draft,c ient p ayer還沒有廣泛支援。