【问题标题】:if I load a flv with netStream, how can I call a function when the flv stops playing如果我用 netStream 加载 flv,当 flv 停止播放时如何调用函数
【发布时间】:2010-09-10 12:00:39
【问题描述】:

我有一个使用 ActionScript 3 的网站,其中包含许多 FLV 动画,这些动画会在您按下按钮时发生。我现在就是这样设置的。

在 AS3 中, 我正在加载 FLv(这是我从 After Effects 以 FLV 形式导出的动画) 与净流。我设置了一个与动画(FLV)播放的时间长度相同的计时器,当计时器停止时,它会调用一个关闭流、打开一个新流并播放另一个视频的函数。我注意到使用计时器的唯一问题是,如果连接速度很慢并且(动画)停止了一秒钟,则计时器会继续运行,并且过早调用下一个 flv。

有谁知道在flv 播放结束时加载flv 或swf 的方法吗?这样下一个 FLV 将始终在前一个 FLV 的运行时间结束时播放,而不是使用计时器?

我正在考虑 onComplete 但我不知道如何实现它!?

【问题讨论】:

    标签: actionscript-3 timer settimeout netstream


    【解决方案1】:

    使用 OSMF 框架很容易实现顺序播放,您应该检查一下。谷歌“osmf 教程”,你应该在网上找到一些教程。

    该框架是相当新的,但看起来它可能会成为 Flash 媒体交付的实际解决方案,因为它不仅限于视频,还包括音频和图像。

    作为开发人员,您不必为 NetStream 和 NetConnection 类而烦恼。开发视频解决方案以及音频和图像解决方案应该简化并且更易于处理。唯一的限制是它需要 Flash 10

    【讨论】:

    • 没有类就没有办法单独使用 as3 吗?我实际上打算研究 osmf,这看起来真的很酷,但我离毕业只有一周的时间,我需要为研究生完成这个项目,所以我需要一些不会花费 e=me 很长时间来研究的东西
    • 我认为 osmf 不会花你一个星期的时间来理解!可能需要几个小时来阅读教程并了解总体思路。检查这个博客
    • 抱歉,我不能再编辑了... osmf 不会花你一个星期的时间来理解!最多需要几个小时来阅读教程并了解总体思路。检查这个rblank.com/,there's基本播放器的代码,所以你不必从头开始,他也有一些视频教程。当然你可以不使用 osmf ,一种方法是检索视频的时长并监控当前位置,一旦当前位置达到时长值,你就可以开始下一个视频,罗斯的解决方案也应该很好用
    【解决方案2】:

    这里有一些代码用于检查 FLV 何时以 NetStream 结尾。我只是提供 sn-ps,因为我假设您已经启动并运行了 FLV。

    //create a netstream and pass in your connection
    var netStream:NetStream = new NetStream(conn);
    
    //add callback function for PlayStatus -event
    var client : Object = {};
    client.onPlayStatus = onPlayStatus;
    netStream.client = client;
    
    //attach your NetStream to the connection as usual
    //---
    
    //function that gets called onPlayStatus
    function onPlayStatus(info : Object) : void {
        trace("onPlayStatus:" +info.code + " " + info.duration);
        if (info.code == "NetStream.Play.Complete") {
            //play the next FLV and so on
        }
    }
    

    编辑:使用您的示例代码,它看起来像这样。

    var nc:NetConnection = new NetConnection(); 
    nc.connect(null); 
    var ns:NetStream = new NetStream(nc); 
    
    var listener:Object = new Object(); 
    listener.onMetaData = function(md:Object):void{}; 
    listener.onPlayStatus = function(info : Object) : void {
        trace("onPlayStatus:" +info.code + " " + info.duration);
        if (info.code == "NetStream.Play.Complete") {
            //play the next FLV and so on
        }
    };
    ns.client = listener; 
    
    vid1.attachNetStream(ns); 
    
    const moviename1:String = "moviename2.flv"; 
    const moviename1:String = "moviename3.flv"; 
    var movietoplay:String = "moviename.flv"; 
    ns.play(movietoplay);
    

    【讨论】:

    • 我已经在运行 flv,但我不擅长解决这个问题。我正在使用实例名称将我的连接附加到舞台上的视频,我将如何将您的代码与我拥有的内容放在一起:... var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); vid1.attachNetStream(ns); var listener:Object = new Object(); listener.onMetaData = function(md:Object):void{}; ns.client = 监听器;常量电影名称1:字符串=“电影名称2.flv”;常量电影名称1:字符串=“电影名称3.flv”; var movietoplay:String = "moviename.flv"; ns.play(movietoplay);
    猜你喜欢
    • 2013-05-11
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多