2009-01-20 69 views
3

我正嘗試使用Adobe Flex和libh264streaming構建視頻播放器應用程序。小小的球員工作得很好。Flex VideoDisplay停止緩存

但是如果視頻是更大的約200-300MB我看到的問題一大堆: 一)瀏覽器中得到crashy 二)它從未停止緩衝,繼續下載,直到它得到整個視頻(300M) C)CPU使用量增加,因此瀏覽器內存消耗

我猜a)和c)是由於b)因爲玩家需要越來越多的內存來存儲視頻。

因此,我想以某種方式限制緩衝區大小,並儘快停止下載視頻。我認爲youtube視頻播放器就是這樣工作的(查看播放器底部的播放器控件)。

任何想法如何在Flex中實現它?

謝謝

回答

1

究竟是什麼 「libh264streaming」?在Google上搜索它只會以這個確切的文字打開這個線索。從你的描述來看,它聽起來好像根本不會流式傳輸視頻,只是提供漸進式下載。

漸進式下載有時被錯誤地稱爲流式傳輸。它只是一個文件的正常HTTP下載,只要視頻標題位於文件的開頭,Flash就會在文件頭帶有一定數量的視頻數據後立即開始播放文件(4個關鍵幀I相信)。漸進式下載傳統上不提供帶寬限制或流式傳輸的其他優點,但最近一些提供的實現可以慢慢下載,這更接近於流媒體,並且可以在文件中間啓動漸進式下載(動態重寫標題),以便人們跳轉到中間沒有下載整個事情。

Flash Player僅支持RTMP流式傳輸。這是一個由Flash Media Server和Red5,rubyizumi等開源選項支持的專有協議。 Adobe在兩天前宣佈它將發佈並提供RTMP的開放許可,因此在不久的將來您應該會看到更多支持RTMP的產品。流式傳輸提供與客戶端和服務器的雙向通信,因此服務器將請求數量的幀作爲緩衝區發送,並且客戶端根據需要請求幀以填充緩衝區。服務器發送的請求數不會超過請求的數量,服務器可以通過只需要刷新緩衝區而不是整個視頻的方式尋找各種點。

如果你想提供大文件,你可能需要一個真正的流媒體服務器。另一種方法是將文件分成塊,根據需要下載並逐一播放。這也會很複雜,但可行。

HTH,

山姆


我們正在招聘!華盛頓特區地區的開發人員和QA(或正在尋找搬遷)應將簡歷發送至[email protected]


+0

對不起,我輸入它完全錯誤。我的意思是mod_h264_streaming http://h264.code-shop.com/trac。 – user43685 2009-01-22 18:53:36

0

我猜的沒有一個人回答了這一個又是因爲有它沒有很大的答案的部分原因。我當然不是Flash流媒體專家,但爲了發佈至少一些對你的迴應,我猜測,從閱讀文檔和實際嘗試一些自己的東西,你試圖要做的事情不能完全用VideoDisplay對象完成,而完全在Flex環境中完成;這可能是需要在服務器上或至少在服務器和客戶端之間進行處理的情況,以便正確傳送和終止流,並且VideoDisplay對象正常運行。

對不起,我希望我對雅有更好的答案;如果有其他人在那裏,請隨時登錄。

0

很難說清楚,但它看起來像你提到的庫提供了一些控制機制來告訴服務器你想玩的塊(我是從他們網頁上的聲明中獲得:「你有很長的視頻剪輯,你不想將它們重新編碼成更小的部分?我們也支持'虛擬視頻剪輯',所以你可以只指定回放視頻的一部分或創建下載鏈接到視頻的特定部分。「

對我來說,似乎你只需要添加一個控制結構,允許你(告訴服務器)獲取視頻塊。

如果那不是po因爲什麼原因,你只需要訪問原始數據流:

我需要知道你在flex中使用什麼接口來加載視頻,但是一般來說,你會添加一個偵聽器來接收ProgressEvent並檢查加載的字節(對於通用加載器對象)

您的其他選擇是使用讀取和寫入方法創建您自己的套接字,您可以在數據進入時檢查字節計數器。您會將字節讀入一個字節陣列,然後當你有一個可用的塊時,你需要將該字節數組轉換成適合播放器對象的格式...

看看flash.net.Socket

http://livedocs.adobe.com/flex/2/langref/flash/net/Socket.html

1

我能夠創建2的VideoDisplay對象的加載在塊MP4文件在基座上的組件(含有各1個分鐘緩衝器說)。當主顯示器達到特定點時(即我的情況下爲緩衝區大小的50%),輔助VideoDisplay會立即開始加載視頻。主視頻結束後,組件即會翻轉到輔助顯示。

這種方法使用mod_h264_streaming很好。尋求行動幾乎立即開展。