Spark VideoDisplay在Google Chrome(和Opera)中等待高CPU使用率

时间:2011-09-06 11:33:36

标签: flex google-chrome flash flex4.5

我创建了一个使用Spark VideoDisplay组件播放视频的Flex网站。 选中后,VideoDisplay将加载到PopUpManager中。

这在所有浏览器中都可以正常使用,除了谷歌Chrome开始播放需要更长的时间,在此期间CPU使用率达到峰值,然后在视频开始播放后再降低。

我已经跟踪了它经过的播放器状态,它们如下:

  1. 装载
  2. 准备好(挂起很久的高cpu)
  3. 缓冲
  4. 播放(缓冲后,CPU使用率下降,视频播放顺利)
  5. 导致这种情况暂时在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();
                }                   
            }
    

    再次感谢!

1 个答案:

答案 0 :(得分:0)

如果您拥有支持的GPU,则默认情况下会部分支持硬件加速。如果你想要完整的3d支持,你需要使用StageVideo并且需要将html中的'wmode'参数设置为'direct'。你应该read up more on it