HTTP Live Streaming 是個很有趣的實現, 它本質上就是把一段視頻 "切片" (經蘋果提供的 mediafilesegmenter), 然後提供給瀏覽器一個包含這些視頻 "切片" 信息的 "索引" - 一份 .m3u8 的 playlist, 瀏覽器據此 "一片一片" 地下載這些片段並播放, 於是便有了 "流" 的效果.
打個比方, 把一段視頻想象成一根黃瓜, 它被切成了黃瓜片放在服務器端, 同時有份清單寫著這黃瓜總長度幾許, 被切成幾片, 每片的 "名字" 是什麼. 拿到這清單的瀏覽器, 便可按圖索驥, 一片一片地拿回來喂給人 "吃".
如果這黃瓜是不斷成長的 - 即, 服務器那端給的不是靜態的一段視頻, 而是從攝像機/衛星電視信號之類過來的 "活" 的 (live) 視頻流 - 這時, 同樣的, 只要送進 "切片機" (mediastreamsegmenter) 上的部分, 都會被切片, 更新到播放列表. 瀏覽器根據更新了的播放列表, 繼續取 "黃瓜片", 直到播放列表裡收到 "黃瓜已分發完畢".
HTTP Live Streaming 的創新之處在於:
- 無需專門的 "流媒體服務器", 可與現有的 CDN 無縫結合
- 走 HTTP 協議, 無需特殊端口, 無需為穿越 NAT 煩惱
#2: 視頻播放時, 瀏覽器完全通過 HTTP 從服務器下載視頻片段. 這讓通常只開放 80 端口的企業網內部分發視頻內容不再需要面對防火牆/NAT 穿越之類的痛苦.
HTTP Live Streaming 雖已提交 IETF, 但目前尚未成為業界標准, 各家也自懷鬼胎. Apple 自家的 iOS 以及 OSX 是完美支持的, 由於 iOS 設備的火爆, 像 Adobe/微軟, 都在服務器上加入了 HTTP Live Streaming 的支持 (不過 flash 插件本身不支持, 反正 iOS 上也跑不了 flash, 哈).
經測試, html5 <video> 嵌 .m3u8 HTTP Live Streaming, 只有在 Apple 的平台上能工作, 即 iPhone/iPad/iPod Touch/Mac 上的 Safari 能播放. 換到 Chrome/Firefox/IE, 則徹底瞎火.
因此, 如果你的視頻項目是針對蘋果用戶, HTTP Live Streaming 就是你需要的. 但要支持其他平台/瀏覽器, 你還需要尋找別的方案.
現正研究 YouTube 的 html5 是如何支持所有瀏覽器以 <video> 進行流播放的, 若有進展再更新.
____
相關閱讀:
- 維基百科: http://en.wikipedia.org/wiki/HTTP_Live_Streaming
- 歷史背景: http://www.appleinsider.com/articles/09/07/08/apple_launches_http_live_streaming_standard_in_iphone_3_0.html
- 官方文檔: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html
- 工具下載 (需開發者賬號): https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=20993
No comments:
Post a Comment