流式传输FLV视频

时间:2013-01-31 22:43:09

标签: actionscript-3 video flv

我有3个flv视频,我正在播放。第一个是介绍。然后第二个是在介绍结束后的介绍之后播放。第二个视频正在循环播放。一切似乎都很好。但有时当我加载swf时,它从第二个视频开始。有什么想法吗?

import flash.events.MouseEvent
var nc:NetConnection = new NetConnection();
nc.connect(null);

var ns:NetStream = new NetStream(nc);
loader.vid.Video_1.attachNetStream(ns);


var listener:Object = new Object();
listener.onMetaData = function(evt:Object):void {};
ns.client = listener;

ns.play("video_1.flv");

ns.addEventListener(NetStatusEvent.NET_STATUS, NCListener);
function NCListener(e:NetStatusEvent){
if (e.info.code == "NetStream.Buffer.Empty") {
ns.play("video_2.flv");
}
};

loader.button_01.addEventListener(MouseEvent.CLICK, play_video_01);

loader.button_01.addEventListener(MouseEvent.ROLL_OVER, play_effect_01);

function play_video_01 (event:Event):void{

    ns.play("video_3.flv");
    loader.button_01_mc.gotoAndPlay (21);

}
function play_effect_01 (event:Event):void{

    loader.button_01_mc.gotoAndPlay (2);
}

1 个答案:

答案 0 :(得分:2)

在您的代码中,您的第二个视频的播放由消息NetStream.Buffer.Empty触发。由于多种原因以及视频播放结束时,可能会分派该消息。例如,当流式传输(我知道您没有这样做)时,可以在出现网络问题时调度NetStream.Buffer.Empty。这肯定是你的问题的原因,但不清楚为什么有时立即调度缓冲区空消息。

我要做的第一件事是修改你的NetStatusEvent监听器,以便它跟踪所有正在分派的消息。这样,您就可以看到发生此问题时发生的事件序列。

其次,您应该尝试使用其他消息来触发第二个视频的播放。我不是100%肯定,但我认为消息NetStream.Play.Stop就是您想要的(当到达视频结束时以及以编程方式停止播放时会调度此消息)。您从NetStatusEvent获得的完整邮件列表为here

结合这两个建议,您的NetStatusEvent处理程序可能如下所示:

function NCListener(e:NetStatusEvent)
{
    var code:String = e.info.code;
    trace("code: ", code);
    if (code == "NetStream.Record.Stop"
        ns.play("video_2.flv");
}

最后,您可能希望向NetStream添加其他事件侦听器。它会调度IOErrorEventAsyncErrorEvent ...当问题发生时,您可能会收到其中一个。