3

我正在構建一個大型Flash網站(AS3),它使用巨大的FLV作爲部分之間的過渡視頻。 FLV是1280x800,並且被縮放到1680x1050(其中大部分不顯示給屏幕較小的用戶),並且大約每個5-8秒。我使用On2的高清編解碼器VP6-S對視頻進行編碼,播放效果與原生FLV播放器,配備Perian的Quicktime以及內置AS3的簡單概念驗證FLV播放應用程序相當不錯。FLV性能和垃圾收集

我遇到的問題是,在實際網站的上下文中,播放不夠流暢;幀速率並不像應該的那樣好,更有問題的是偶爾會出現晃動和丟幀(有時會暫停視頻長達四分之一秒左右)。我的猜測是,這是由Flash播放器中的垃圾收集引起的,這種情況不確定,因此難以測試和控制。

我正在使用FLVPlayback的單個實例來播放視頻;我最初直接使用NetStream對象等,但切換到FLVPlayback爲this reason。有沒有人經歷過FLVPlayback(或者更普遍的是,使用高清Flash視頻)的這種顛簸?我說得對,GC是這裏的罪魁禍首,如果是這樣,在播放這些系統密集型轉換時,是否有辦法阻止它?

回答

4

跳動的FLV/F4V播放幾乎沒有垃圾收集的結果 - 視頻實際上是保存在內存中,直至其完全卸載,所以沒有垃圾收集發生在所有的(除非你已經做了一些非正統的,比如將視頻放在容器上,cacheAsBitmap設置爲true)。

如果您不需要特定的FLV功能(如the link posted by daidai suggests - 免責聲明,這是我的博客),切換到F4V將有所幫助,但總體而言,您還必須瞭解影響視頻合成的任何內容。由於大尺寸視頻會強制重疊的所有內容重新渲染,因此任何小對象都會對性能產生重大影響。

你在視頻的頂部是否有東西?嘗試擺脫它們,如果可能的話,或將cacheAsBitmap設置爲true(如果它們沒有動畫)。這對於複雜的矢量繪圖或文本特別有用(位圖/圖像繪製速度要快得多)。如果他們有不同的混合模式,那麼你有點搞砸了 - 你可以使用正常的混合模式嗎?

視頻下方是否有任何內容?如果是這樣,請在視頻播放過程中擺脫它們(將可見性設置爲false)。

要檢查不必要的渲染,以某種方式暫停視頻,右鍵單擊,打開「顯示重繪區域」(調試播放器)。你是否連續看到紅色方格畫?然後在背景上發生了一些事情,更好地擺脫它。

通過onEnterFrame或定時器/間隔在背景上發生了什麼?嘗試暫停它。

你的視頻是30fps,還是CG渲染(例如,可以使用運動模糊)?如果是,請嘗試以24fps的速度渲染,或者介於兩者之間 - 質量仍然很好,但要解碼和繪製的數據要少得多。

你可以使用較小的視頻嗎?即使你仍然在渲染它們的大小相同,解碼和渲染的像素數據也會非常有限,並且對質量的影響可能非常小。

這幾乎總結了一切。擺脫屏幕上的其他一切通常是您的首要任務。

0

您是否嘗試過使用H.264編碼視頻? Flash播放器現在支持它們一段時間,它可能會更好地工作。這就是大多數人在Flash中使用高清視頻的原因(例如Youtube,Vimeo等)。

就像一個測試,嘗試在youtube上播放1080p高清視頻,看看你是否暫停。

+0

其實,是的,在安置VP6-S之前,我們嘗試了很多格式。我們對H.264的實驗並不詳盡,因爲有很多不同的配置可供嘗試,但總的來說,即使使用H.264中系統密集度最低的配置文件,我們使用VP6獲得了更好的性能和文件大小-S。儘管如此,我很樂意接受這種可能性。您是否可以爲高清高動態Flash視頻提供優化H.264編碼設置和工具的良好資源? – justinbach 2010-04-23 14:50:30