2008-12-04 169 views
3

我正在研究流式傳輸二進制數據到瀏覽器(通過http)。我正在尋找關於如何去做這件事的好方法。最終,我將擁有一個實時數據源,並且我想操縱這些數據並在瀏覽器中顯示它(在真實的時間)。火狐第一,IE會很好......但我並不那麼挑剔。我有一個firefox插件,可以滿足我的需求,但我更喜歡用javascript/html編寫的東西,而不需要用戶安裝任何插件。通過http流式傳輸二進制數據

我一直在尋找multipart/x-mixed-replace MIME/media類型,它看起來像在這個項目中可能很有用,但我想聽聽更好的方法來做到這一點(如果有的話)之前我花了太多時間走下這條路。

Flash可能會完成這項工作,但是我想避免使用插件。我希望有最簡單的解決方案(不是全部?),理想情況下只需javascript/html。

我也一直在彗星看看能爲我做些什麼。

回答

4

很多這取決於你想要處理的數據。我假定渲染它。

Flash可能是最簡單的解決方案。這是一個普通的附加組件,幾乎每個人都應該擁有它;所以你不會遇到很大的不兼容風險。

對於二進制數據處理來說,JavaScript並沒有被認爲是一個很好的平臺 - 所以在這個領域沒有太多的發展。我不認爲你會爲你想要的東西找到很多幫助。特別是當你獲得渲染點 - 除非你可以也許將每個二進制文件轉換爲canvas script,因爲它是關於JavaScript中唯一可用的動態圖像。

IE可能實際上是個例外,因爲您可能可以使用一些ActiveX對象來爲幾種文件類型完成此操作。但是,那麼你刪掉了大多數其他瀏覽器。

+0

是的,最終呈現數據,我用畫布對象做了一些測試,看起來不錯。感謝您的想法。 – 2008-12-05 00:15:01

1

您可以使用Base64將二進制文件轉換爲文本併發送到瀏覽器。有了IE,你可以直接將它轉換爲二進制文件,但我不確定你是否可以使用Firefox和其他軟件。我確實看到了用於Base64 enflate/deflate的jscripts和一個名爲base64.js的腳本,它可能也會進行轉換。

但是,您可能會更好地將二進制數據轉換爲JSON並使用AJAX傳輸數據,然後在瀏覽器中將其作爲JavaScript對象處理。 Web服務器負責獲取數據並將其轉換爲JSON,因此無論使用哪種編程語言,您都應該能夠處理二進制文件。

+0

如果您轉換爲Base64,那麼您將網絡帶寬增加1/3。當您可以流式傳輸到多個客戶端時,效果不佳。 – Matt 2011-02-14 10:27:16

+0

同意。希望HTTP壓縮有助於最大限度地減少帶寬的增加,但也會增加額外的負載。 Q中沒有太多細節,但這是純HTML的一種選擇(沒有插件,當時也沒有考慮HTML5)。 – Ryan 2011-02-14 19:51:43

1

我通常會避免使用multipart/x-mixed-replace,因爲它有非常粗略的瀏覽器支持。我知道我的相機的multipart/x-mixed-replace不適用於IE或更新版本的Firefox(儘管顯然有一個配置可以改變它)。

我認爲一個小的Flash應用程序可能是您最好的選擇之一。

2

至於數據流和套接字樣式的連接,你可能想看看APE (Ajax Push Engine) project。它允許你設置一個HTTP代理,你的JavaScript可以連接到真正的套接字連接。

至於如何處理數據到達時,我已經做了一個概念證明,展示瞭如何使用原始PNG數據,解析並將其呈現給瀏覽器。Check it out.

2

我有之前做這個確切的事情與視頻(即動態JPEG)的數據。

我注意到你剛纔說的「二進制數據」 ...這是圖像數據或不?它是什麼?

多重/ X - 混合替換很多瀏覽器的這些天精品工程。我認爲它甚至可能在IE的更高版本中得到支持。它肯定能在5年前的所有版本的Firefox中運行,當時我必須實現這一點。基於Webkit的瀏覽器可能也支持Chrome瀏覽器和Safari瀏覽器。

然而,在我看來這是真的只適用於基於LAN的應用程序。原因是你發送的數據很多。而不是發送連續幀之間的差異(如果它是視頻),你會每次發送整個圖像。根據用戶數量的不同,這也會給服務器帶來很大的負擔。

因此,儘管多/ X - 混合替換是迄今爲止最簡單的實現,它不一定是最合適的解決方案。這又取決於你的原始數據類型。

對於視頻理論上你可以使用JavaScript編寫去做什麼。事實上,如果你的谷歌爲JavaScript視頻播放器,你可以找到一些。我懷疑它們非常快,可能會給客戶機帶來沉重的負擔。儘管如此,它確實可行。

那麼你的選擇是: 1)內容類型的混合取代 2)下載一個插件 原生瀏覽器插件(最快最有效的) Flash或Silverlight基於 3)基於JavaScript的球員

如果是你想要的視頻最後一個選項,這是在最前沿的是 4)基於HTML5的視頻。 http://www.html5video.org/ 由於標準仍在批准和瀏覽器支持有限,我不會 在這個時候推薦它。