我有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);
}
答案 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
添加其他事件侦听器。它会调度IOErrorEvent
和AsyncErrorEvent
...当问题发生时,您可能会收到其中一个。