無插件串流

最近使用 Aurora.js 想要做到無插件在瀏覽器裏面串流音樂。Aurora.js 把播放、下載、解碼等等東西做完了,麻煩點在於要怎麼邊載入邊播放。如果已經有檔案的片段,那就可以直接用 AV.Player(new AV.Asset.fromBuffer(buffer)) 從 buffer 播放,要怎麼取得檔案的片段才是問題……看來一般瀏覽器裏面 XMLHttpRequest 是沒辦法在載入完成以前讀取片段內容的

想了一下大概有2種方法可以解決這問題:在 XMLHttpRequest 中用 Range header 來指定想要的檔案片段,譬如說載入檔案的第 10000byte~20000byte ,這樣一個單一 XHR 就只包含檔案的片段 (chunk),片段完成後就可以直接讀取。

這方法的問題在於 server side 不一定支援片段載入檔案,像是 ownCloud 的 PHP code 並沒有處理 Range 這個 header ,所以不管指定多少都會回傳完整的檔案。不過若單純只是把檔案用 Apache serve 出來沒有經過動態網頁語言那應該就可以用,Apache 會處理這個 header 。

這樣也會造成一些 overhead ,因爲一個檔案會需要好幾個 request 才能處理完成。在不同的網路環境當中調整 chunk size 也是一門學問。

第二種方法就是直接用 WebSocket 啦,連線會一直開着,伺服器也就可以不斷地推送資料給 client ,在 client side Javascript 裏面可以直接讀進 buffer 。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s