2011-11-19 143 views
1

我一直在編寫一個接收QVGA視頻流的瀏覽器插件。我希望以可通過JavaScript以編程方式接口的方式將該視頻流式傳輸到瀏覽器 - 例如,可以將其饋送到畫布中的某個元素或Image()對象。將視頻從插件流式傳輸到瀏覽器

注意:這意味着我試圖避免讓我的插件繪製到一個窗口中 - 我知道我可以做到這一點,但我想要的東西與網頁的其他渲染很好地交互,並且還有一個衆所周知的對象模型,我不必實現。

棘手的部分是如何快速做到這一點 - 我可以做到這一點,例如通過設置src屬性來獲得base64編碼數據,但開銷非常高。

我的問題是,是否有一種方法可以避免更多的開銷(例如提供一個原始圖像緩衝區而不是格式化圖像,而base64編碼只是爲了讓瀏覽器解碼) - 我現在所擁有的並不是足夠快。對於環境,我使用Firebreath編寫插件(C++與NPAPI/ActiveX大多數都是抽象的),我想保留我對Mac和Windows的支持。深入研究直接使用NPAPI是可以接受的,但我寧願不行。

編輯:我使用的元件和使用該數據的UI方案更新其「SRC」屬性的base64編碼的位圖解決了這個問題 - (例如imageJSObject- >的SetProperty(「SRC」,「數據:圖像/ bmp; base64,<編碼的BMP >'); 性能不是很好,但它足夠好,主要的注意事項是,至少在Chrome 15上,onload只會被觸發一次,而不是每次更改src屬性時我不得不在每次更新後生成我自己的事件

回答

1

有沒有高性能的方法發送二進制數據到頁面;你可能會使用html5視頻標籤進行流式處理,在這種情況下,您可能會在您的插件中提供一個Web服務器源,但實際上將二進制數據發送到JavaScript base64可能是您最快的方法。另一方面,如果您要使用無窗口插件,您必須在指示時繪製插件(您可以調用PluginWindow上的InvalidateWindow來請求重繪),並且您將繪製到hDC中,但是您會參與DOM排序。這是Windows特有的;在Mac上,如果使用CoreGraphics(一些但不是所有瀏覽器上的CoreAnimation)繪製,您可以做同樣的事情。

至於獲取數據到JavaScript,您的選擇是使用套接字(和瀏覽器中的東西從本地主機查詢它們,如websockets或xmlhttprequest或其他)或base64編碼並將其作爲字符串發送。 NPAPI中還沒有二進制數據功能。

+0

感謝您的快速響應 - 我一直在做更多的四處看看,它看起來像

+0

不,沒有跨平臺的方式爲標籤創建自定義編解碼器。我甚至不知道你是否可以製作一個directshow過濾器並在IE中工作,並且我嚴重懷疑它可以在Firefox上工作,但是我沒有真正考慮過這些,所以我可能是錯的。祝你好運,雖然 – taxilian

+0

我知道你至少可以通過媒體基金會解決它(這就是谷歌提供的IE瀏覽器的WebM編解碼器) –

相關問題