2011-09-06 53 views
0

我創建了一個使用Spark VideoDisplay組件播放視頻的Flex網站。 選中後,VideoDisplay將在PopUpManager中加載。Spark VideoDisplay在Google Chrome(和Opera)中長時間等待高CPU使用率

在所有的瀏覽器中都可以正常工作,除了谷歌瀏覽器需要更長的時間才能開始播放,在這段時間內,CPU使用率達到峯值,然後在視頻開始播放時會回落。

我追蹤的玩家指出它經歷並有如下幾點:

  1. 加載
  2. 準備(掛起具有高CPU年齡)
  3. 緩衝
  4. 播放(後緩衝,CPU使用率下降,視頻播放順利)

什麼可能導致這暫時掛起這麼多Chrome在更長時間?我認爲我可以在所有瀏覽器中看到相同的功能和行爲,因爲Flash只是一個作爲單獨進程運行的插件?

謝謝!

編輯:看來,它在Opera中也是一樣。兩者之間有什麼共同點可以解釋這種行爲?

編輯2:感謝您的回覆,這裏的相關代碼:

MXML:

<s:Group id="videoPopup" 
      click="closePopupHandler(event)"> 

     <s:Rect width="100%" height="100%"> 
      <s:fill> 
       <s:SolidColor color="#2a2a2a"/> 
      </s:fill> 
     </s:Rect> 

     <spinner:Spinner id="spinner" 
         tickColor="#ffffff" 
         horizontalCenter="0" verticalCenter="0"/> 

     <s:VideoDisplay id="videoDisplay" width="100%" height="100%" 
         updateComplete="videoDisplay_updateCompleteHandler(event)" 
         mediaPlayerStateChange="videoDisplay_mediaPlayerStateChangeHandler(event)" 
         complete="videoCompleteHandler(event)"/> 

     <graphics:CloseButton id="closeVideoButton" visible="false" width="60" height="60" top="10" right="10"/> 

     <s:Label id="videoCredit" text="Filmed &amp; produced by Engine Creative" 
       bottom="25" right="10" alpha="0" 
       fontFamily="HelveticaEmbedded" fontSize="11" color="#cccccc"/> 

    </s:Group> 

啓動動作:

     PopUpManager.addPopUp(this.videoPopup, FlexGlobals.topLevelApplication as DisplayObject, true); 
         videoPopup.width = Math.min(1280, stage.stageWidth * 0.9); 
         videoPopup.height = Math.min(720, stage.stageHeight * 0.9); 
         PopUpManager.centerPopUp(this.videoPopup); 

         hidePlayOverlay.play(); 
         showVideoCredit.end(); 
         spinner.play(); 
         showCreditTimer.addEventListener(TimerEvent.TIMER_COMPLETE, showCredit); 
         showCreditTimer.reset(); 
         showCreditTimer.stop();    

         if(!videoDisplay.source || videoDisplay.source != _asset.source) 
          videoDisplay.source = _asset.source; 

         videoDisplay.seek(0); 
         videoDisplay.play(); 

及相關事件處理程序:

 protected function videoDisplay_updateCompleteHandler(event:FlexEvent):void 
     { 
      Debug.log("video update complete"); 
      if (videoDisplay.videoObject) 
       videoDisplay.videoObject.smoothing = true; 
     } 

     protected function videoDisplay_mediaPlayerStateChangeHandler(event:MediaPlayerStateChangeEvent):void 
     { 
      Debug.log("player state: " + event.state); 

      showCreditTimer.reset(); 
      if (event.state == MediaPlayerState.PLAYING) 
      { 
       showCreditTimer.start();      
       showCloseButton(); 
       spinner.stop(); 
      }     
     } 

再次感謝!

+0

你能顯示代碼嗎?你使用h.264嗎?你在使用GPU加速嗎? –

+0

謝謝,上面的代碼... – timwjohn

+0

但你忽略了我的其他問題... –

回答

0

如果您有支持的GPU,硬件加速在默認情況下部分受支持。如果你想要全3D支持,你需要使用StageVideo,並且需要在html中將'wmode'參數設置爲'direct'。你應該read up more on it