0

我有 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);
}
4

1 回答 1

2

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

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

其次,您应该尝试使用另一条消息来触发第二个视频的播放。我不是 100% 确定,但我认为该消息NetStream.Play.Stop是您想要的(当到达视频结尾以及以编程方式停止播放时会发送该消息)。您从 a 获得的完整消息列表NetStatusEvent这里

结合这两个建议,您的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......也许你会得到其中一个。

于 2013-02-01T03:12:56.503 回答