【问题标题】:Flash AS3 load videos while another is playingFlash AS3 在另一个视频播放时加载视频
【发布时间】:2012-10-15 09:16:35
【问题描述】:

我的 Flash 网站需要一个接一个地播放 10 个视频,为了减少等待时间,我需要在播放视频 1 时预加载视频 2 和视频 3,依此类推...

我需要遵循这个结构,因为在视频 1 结束时,用户将有机会选择下一个(2 或 3)。

所有的代码都在我电影的第一帧,我还要学习类、包等。

第一个视频是通过我放置在舞台上的链接视频(myVideo)播放的,代码如下:

var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns.play("video1.f4v");
var myVideo:Video = new Video();
myVideo.attachNetStream(ns);
addChild(myVideo);

我需要了解在 nr 时预加载其他两个视频的最佳方式。 1 正在播放。

我要不要再创建 2 个链接的视频,将它们放在舞台外并在那里加载视频,以便在需要时立即可用?

非常感谢您的帮助!

--- 编辑:在我的帖子中添加了更多详细信息 ---

我正在做一些测试以了解此过程,我尝试了以下方法:

var ns2:NetStream = new NetStream(nc);
var ns3:NetStream = new NetStream(nc);
ns2.play("video/video2.f4v");
ns2.pause();
ns2.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns3.play("video/video3.f4v");
ns3.pause();
ns3.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);

它可以工作,但是以这种方式加载 2 部电影会导致 100% 的 cpu 使用率和视频播放的帧速率不佳...也许我必须加载视频 2,检查加载是否完成,然后开始加载视频 3.. . 这是正确的做法吗?

再次感谢

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    我相信我找到了方法,这里是完整的脚本:

    var nc:NetConnection = new NetConnection();
    nc.connect(null);
    var ns:NetStream = new NetStream(nc);
    ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
    ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
    ns.play("video1.f4v");
    var myVideo:Video = new Video();
    myVideo.attachNetStream(ns);
    addChild(myVideo);
    
    var ns2:NetStream = new NetStream(nc);
    var ns3:NetStream = new NetStream(nc);
    
    function statusHandler(event:NetStatusEvent):void
    {
        switch (event.info.code)
        {
            case "NetStream.Play.Start" :
    
            ns2.play("video/video2.f4v");
            ns2.pause();
            ns2.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
    
            ns3.play("video/video3.f4v");
            ns3.pause();
            ns3.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
    
            break;
    
            case "NetStream.Play.Stop" :
            trace("ns video stop");
            break;
        }
    }
    

    当我调用 ns.play("video2.f4v");视频已经在浏览器缓存中,因此可以立即开始播放,而且 CPU 使用率看起来也不错。

    如果有更专业的方法我想了解更多。

    trace("谢谢,再见");

    【讨论】:

      【解决方案2】:

      实现这一点的最简单方法是使用 Greensock 的 LoaderMax。您可以设置要加载的视频列表,然后根据用户的操作对其中一些视频进行优先级排序。

      LoaderMax 具有一些从头开始构建起来相当困难的强大功能,它还修复了一些奇怪的 Flashplayer 行为。

      有一点学习曲线,但不是太陡。

      【讨论】:

      • Strah 非常感谢您的回复,我想为一些更复杂的项目保留 LoaderMax,我想在没有外部库的情况下解决这个问题,我正在为我的原始帖子添加更多细节,再次感谢
      猜你喜欢
      • 2014-05-13
      • 2020-09-13
      • 1970-01-01
      • 2010-11-24
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多