如何利用play2()函数来执行video的快速切换?

我目前正在与分辨率切换function的Flash网页游戏工作。 我想在Actionscript中使用NetStream类的play2()函数。

我遇到的问题是video不会很快改变。 对于熟悉play2()function的玩家,我相信玩家正在执行"standard switch"而不是"fast switch."

该文档说,当偏移参数是-1时,发生快速切换。 实际上发生了什么,虽然一旦收到"NetStream.Play.Transition"事件,播放器就等待,直到达到ns.time + ns.bufferLength所指示的时间,然后再执行切换。

我以为快速切换清除缓冲区,但在检查ns.backbufferlength ,我发现,一切仍然caching。 它还提到:“当偏移量是-1时,交换机会在netstream.time + 3之后的第一个可用关键帧处出现”,这就是为什么我感到困惑。

任何有关这个问题的帮助/见解将不胜感激。

下面是描述发生了什么的代码片段newStream()当用户单击以更改为新的分辨率,youtube样式时调用newStream() ):

 public function newStream(address:String):void { var opts:NetStreamPlayOptions = new NetStreamPlayOptions(); opts.streamName = address; opts.transition = NetStreamPlayTransitions.SWITCH; opts.offset = -1; ns.play2(opts); } private function nsCallback(event:NetStatusEvent) { switch(event.info.code) { case "NetStream.Play.Transition": { trace("Current time (on Transition): " + ns.time, "Buffer: " + ns.bufferLength); var estTime:Number = ns.time + ns.bufferLength; trace("Estimated Completion Time: " + estTime); break; } } } 

正如文档所述 :“offset的默认值为-1,默认切换行为为标准,在这种模式下,服务器从接收切换呼叫的时间点开始,在那一刻开关。“

所以你必须把'offset'参数改成一个高于当前播放时间的值 (Netstream.time)。 如果值较小,则发送NetStream.Play.Failed状态事件。

可能是服务器试图find最近的i帧到当前的偏移量,这需要时间。 如果你知道什么是FPS,并且两个I帧之间的时间是你可以尝试寻找一个非常接近下一个或前一个I帧的时间,这将加快search和服务。

有关i-frame的更多信息: http : //en.wikipedia.org/wiki/Video_compression_picture_types