如何检测视频何时缓冲?

时间:2009-12-07 22:17:00

标签: flash actionscript-3 video streaming buffering

今天我的问题涉及Flash AS3视频缓冲。 (流式或渐进式)我希望能够检测视频何时被缓冲,因此我可以显示某种动画,让用户知道等待一段时间。

alt text

目前我的视频将启动,在第1帧保持3-4秒然后播放。有点给人的印象是视频暂停或被打破:(

更新

感谢iandisme我相信我现在正朝着正确的方向前进。 NetStatusEvent from livedocs。在我看来,要处理的关键状态是"NetStream.Buffer.Empty"所以我在那里添加了一些代码来查看这是否会触发我的动画或跟踪语句。还没有好运,但是当缓冲区已满时它会触发我的代码:/也许我的视频总是介于Buffer.EmptyBuffer.Full之间,这就是为什么当我为{test}测试用例时它不会触发任何代码的原因{1}}?

当前代码

Buffer.Empty

3 个答案:

答案 0 :(得分:2)

您使用的是定制播放器吗?我知道FLVPlayback类有一个buffering event内置。

如果您没有使用FLVPlayback,则NetStream对象会在每次启动或停止缓冲时触发包含info object的netStatusEvent。您应该能够捕获该事件并使用该事件播放/隐藏您的动画。

答案 1 :(得分:1)

你可以尝试每100毫秒检查一次NetStream的bufferTime和bufferLength,并根据它做出决定。 NetStream的bufferTime告诉它在播放之前应该缓冲多长时间,而bufferLength告诉缓冲区已经有多长时间了。

function onTimerEvent(e:TimerEvent):void {
  var percent:Number = Math.round(ns.bufferLength/ns.bufferTime100 * 100);
  if (percent >= 95 && contains(bufferLoop)) {
    removeChild(bufferLoop);
  }
  if (percent < 25 && !contains(bufferLoop)) {
    addChild(bufferLoop);
  }
}

答案 2 :(得分:0)

我遇到了这个,并认为我会分享。 Leon上面提到“NetStream.Buffer.Empty”没有跟踪任何内容。那是因为您从本地计算机加载FLV,因此缓冲区永远不会为空。它实际上是在你实际在线播放时。

我所做的只是将我想要的剪辑设置为电影开始播放时可见的“等待缓冲区”,然后使用此代码使其消失并返回。工作就像一个魅力。

var vidplaying:Boolean = false;

playmovie_btn.addEventListener(MouseEvent.CLICK, playmovie);

function playmovie(event:MouseEvent):void{

    vidplaying = true;
    wait_mc.visible = true;
        (yoru flv and netstream stuff) ect
}

ns.addEventListener(NetStatusEvent.NET_STATUS, netStatus); 

    function netStatus(e:NetStatusEvent) {

        if(vidplaying == true && e.info.code == "NetStream.Buffer.Empty"){
            wait_mc.visible = true;
        }
        if(e.info.code == "NetStream.Buffer.Full"){
            wait_mc.visible = false;
        }
}// netStatus