Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 流媒体FLV视频_Actionscript 3_Video_Flv - Fatal编程技术网

Actionscript 3 流媒体FLV视频

Actionscript 3 流媒体FLV视频,actionscript-3,video,flv,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(

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

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

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

其次,您应该尝试使用另一条消息来触发第二个视频的播放。我不是100%确定,但我认为消息
NetStream.Play.Stop
是您想要的(当到达视频结束时,以及当您以编程方式停止播放时,会发送该消息)。您从
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
。它发送一个
IOErrorEvent
AsyncErrorEvent
。。。当问题发生时,您可能会得到其中一个