2013-01-31 216 views
0

我有3个流式传输的FLV视频。第一个是介绍。然后第二个在介绍结束后的介绍后播放。第二个视频正在循环播放。一切似乎都很好。但有时当我加载swf时,它会从第二个视频开始。任何想法为什么?流式传输FLV视频

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

回答

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 ......也许你在问题发生时得到了其中一个。