StageSideo采用全屏模式

时间:2015-03-25 17:05:06

标签: actionscript-3 flex air stagevideo

好的我想知道这是一个错误还是我在这里做了一些无序的事情。

我在运行OS X 10.10.3的mac上 Flex SDK 4.12 with Air 4.0

我正试图从一个从捕获卡输入的NetStream播放StageVideo。这一切都完美无缺,直到我希望视频全屏播放。 NetStream正在输入一个720x480的视频流。如果我将Stagevideo视口设置为任意大小,它会将1:1缩放视为正常并相应地缩放。但是,当我进入全屏并将视口设置为舞台宽度和高度时,视频似乎正确缩放...但是只有视频的顶部720x480像素显示(好像它被视频源尺寸掩盖了?! ?)。如果我然后点击“退出”退出全屏(我的应用宽度和高度设置为我的屏幕尺寸)...舞台视频正确填充整个屏幕(但当然显示mac工具栏)。

此时我认为这是一个错误?我已经尝试颠倒事件的顺序(首先是全屏,然后是初始化视频...首先是init视频,然后是全屏并重置视口)但是在任何一个顺序中得到相同的结果。

protected function init():void{
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onStageVideoState); 
        }

        private function onStageVideoState(event:StageVideoAvailabilityEvent):void {
            stage.removeEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onStageVideoState); 
            if(event.availability == StageVideoAvailability.AVAILABLE){
                _video = stage.stageVideos[0];
                _video.addEventListener(StageVideoEvent.RENDER_STATE, onStageVideoRenderStateChange);

                // this captures the cam and feeds it through a NetStream to the StageVideo... this part works fine
                var capture:CaptureDevice = new CaptureDevice();
                capture.play(ffmpeg, _video);
            } else {
                // borked
            }
        }

        private function onStageVideoRenderStateChange(event:Object):void {
            stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullScreen);
            stage.displayState = StageDisplayState.FULL_SCREEN;
        }

        private function onFullScreen(event:FullScreenEvent):void{
            stage.removeEventListener(FullScreenEvent.FULL_SCREEN, onFullScreen);
            _video.viewPort = new Rectangle(0,0,stage.stageWidth, stage.stageHeight);
        }

其他人看到这种奇怪吗?这是全屏遮蔽的镜头: weird masking of stagevideo

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,除了播放1920 x 1080 mp4。

我发现我可以使用计时器黑客来解决它。视频不再被屏蔽为四分之一大小,并且菜单栏被隐藏。

private function init():void
{
    //Dodgy Timer Hack
    //Fixes fullscreen issue with stageVideo
    var timer:Timer = new Timer(5000,1);
    timer.addEventListener(TimerEvent.TIMER, addedToStage);
    timer.start();
} 

private function addedToStage(e:Event):void
{
    stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
    stage.scaleMode = StageScaleMode.SHOW_ALL;
    stage.align = StageAlign.TOP_LEFT;

    initVideo();
}