使用 ActionScript 播放完视频后淡出 NetStream

Posted

技术标签:

【中文标题】使用 ActionScript 播放完视频后淡出 NetStream【英文标题】:Fade out a NetStream after the video finishes playing using ActionScript 【发布时间】:2013-12-12 01:44:38 【问题描述】:

我正在开发一个房地产网站,会有多个属性,每个属性都有自己的主页。每个属性主页都会在页面加载后播放不同的介绍视频。

我正在使用 Flash 播放视频,从 flashvar 中获取视频文件名。

我正在使用 Flash Pro CS4 和 ActionScript 3.0,这是我目前所拥有的代码(非常初级),目前运行良好:

//VARIABLLE DECLARATIONS
var video;
var nc;
var ns;
var video_file;

//Get Flashvar intro_video_file
video_file = root.loaderInfo.parameters.intro_video_file;

//RUN ON STARTTUP
nc = new NetConnection();
nc.connect(null);
ns = new NetStream(nc);
ns.client = this;
video = new Video(560, 315);
addChild(video);
video.attachNetStream(ns);

ns.play(video_file);

但我希望在播放之前加载视频并淡入,然后在播放完成后淡出,而不是仅仅挂在那里

淡入不太重要。

我是 Flash 和 ActionScript 的初学者,谁能给我一些关于如何配合使用的指示?

【问题讨论】:

【参考方案1】:

一种可能性是调整视频的 alpha 属性:

video.alpha = .5;

不过,这必须通过定时事件来处理:

tmr = new Timer(500, 0);
tmr.addEventListener(TimerEvent.Timer, onTimer);
tmr.start();
.
.
.
private function onTimer(pEvent:TimerEvent):void

    video.alpha += .125; // or -=, case depending
    if (video.alpha == 1.0)
    
        tmr.stop();
        tmr.removeEventListener(TimerEvent.Timer, onTimer);
    

这些只是提供的示例 int 和 Number 值;您必须根据需要调整它们。但是请注意,ActionScript 3 中的 Timer 对象往往会在每秒不超过几次的情况下非常糟糕,至少如果您不以潜在的尴尬方式进行设置的话。所以这在很多情况下都应该有效,但如果你想,让我们说,每秒 20 次将 alpha 值减少 0.01,这可能是也可能不是你的最佳选择。

【讨论】:

我使用了您的建议并进行了一些调整,请参阅 Rob Fenwick 的答案,这是我作为不同的用户名。谢谢【参考方案2】:

我错误地以其他用户的身份发布了上述问题,但想分享一下我到目前为止得到的结果。

import flash.utils.Timer;
import flash.events.TimerEvent;

function fadeOut() 
    function onTimer(pEvent:TimerEvent):void
    
        video.alpha -= .125; // or -=, case depending
        if (video.alpha == 0)
        
            myTimer.stop();
            myTimer.removeEventListener(TimerEvent.TIMER, onTimer);
        
    
    var myTimer:Timer = new Timer(40, 0);
    myTimer.addEventListener(TimerEvent.TIMER, onTimer);
    myTimer.start();


function fadeIn() 

    function onTimer(pEvent:TimerEvent):void

        ns.pause();
        video.alpha += .125; // or -=, case depending
        if (video.alpha == 1.0)
        
            myTimer.stop();
            myTimer.removeEventListener(TimerEvent.TIMER, onTimer);
            ns.resume();
        
     
     var myTimer:Timer = new Timer(40, 0);
     myTimer.addEventListener(TimerEvent.TIMER, onTimer);
    myTimer.start();




//VARIABLLE DECLARATIONS
var video;
var nc;
var ns;
var video_file;


function statusHandler(event:NetStatusEvent):void 
 
    switch (event.info.code) 
     
        case "NetStream.Play.Start": 
            fadeIn();
            break; 
        case "NetStream.Play.Stop": 
        fadeOut();
            break; 
     




//Get Flashvar video_file
video_file = root.loaderInfo.parameters.intro_video_file;

//RUN ON STARTTUP
nc = new NetConnection();
nc.connect(null);
ns = new NetStream(nc);
ns.client = this;
video = new Video(560, 315);
addChild(video);
video.attachNetStream(ns);
ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); 
ns.play(video_file);
video.alpha = 0;

working example

【讨论】:

以上是关于使用 ActionScript 播放完视频后淡出 NetStream的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flash 中使用 Actionscript 3.0 制作动态视频播放器

如何创建由 xml 文件驱动的 Adob​​e Flash cs6 Actionscript 3 rtmp 视频播放器?

在 AVQueuePlayer 中播放完最后一项后如何显示工作表视图?

AVPlayer replaceCurrentItemWithPlayerItem 打破 UIViewAnimation

Youtube API - onclick 播放视频 - 跨浏览器

ActionScript 3 AS3视频播放器,放置在时间轴上,带有旋转预加载器