Actionscript 3 NetStream:双阈值缓冲和超越缓冲区的搜索

Actionscript 3 NetStream:双阈值缓冲和超越缓冲区的搜索,actionscript-3,flash,buffering,netstream,Actionscript 3,Flash,Buffering,Netstream,是一篇关于双阈值缓冲的有用文章。它解释说,您可以在NetStream上侦听NetStream.Buffer.Full和NetStream.Buffer.Empty事件,并相应地调整NetStream的缓冲时间,以充分利用可用带宽,还可以获得快速的视频启动时间。不过我遇到了一个问题。当我在NetStream中搜索经过缓冲的视频部分时,缓冲区再次为空,但我没有得到NetStream.buffer.empty事件。NetStream的缓冲时间仍然设置为我的扩展缓冲时间,因此我失去了快速启动时间的优势。

是一篇关于双阈值缓冲的有用文章。它解释说,您可以在
NetStream
上侦听
NetStream.Buffer.Full
NetStream.Buffer.Empty
事件,并相应地调整
NetStream
的缓冲时间,以充分利用可用带宽,还可以获得快速的视频启动时间。不过我遇到了一个问题。当我在NetStream中搜索经过缓冲的视频部分时,缓冲区再次为空,但我没有得到
NetStream.buffer.empty
事件。
NetStream
的缓冲时间仍然设置为我的扩展缓冲时间,因此我失去了快速启动时间的优势。您如何实施此策略,使其在这种情况下正常工作?如何判断缓冲区是否再次为空,或者是否已查找过可用的缓冲区


编辑:我可能应该提到我正在使用缓冲区搜索(智能搜索)。如果我没有,我想这不会是一个问题,因为在没有启用此功能的情况下,flash会在每次搜索时刷新缓冲区

对我来说,解决方法就是在每次搜索时重置缓冲时间。您仍然会得到
NetStream.Buffer.Full
事件,如果您碰巧查找到缓冲区已经大于最小缓冲区的位置,它将立即触发,因此
NetStream.Buffer.Full
的处理程序将立即将缓冲时间设置回扩展的缓冲时间。下面是一个例子:

var videoStream:NetStream = new NetStream(nc);

videoStream.addEventListener(NetStatusEvent.NET_STATUS, function (event:NetStatusEvent):void {
    switch(event.info.code) {
        case "NetStream.Buffer.Full":
            // this will keep the buffer filling continuously while there is bandwidth
            videoStream.bufferTime = Settings.maxBuffer;
            State.buffering = false;
            break;
        case "NetStream.Buffer.Empty":
            // if we run out of buffer we'll reset the buffer time to the min
            videoStream.bufferTime = Settings.minBuffer;
            State.buffering = true;
            break;
    }
}

_view.addEventListener(SeekEvent.SEEK, function (event:SeekEvent):void {
    State.buffering = true;
    videoStream.bufferTime = Settings.minBuffer;
    videoStream.seek(event.seek * (_duration || 0));
});

这篇文章对缓冲长流非常有帮助是的,但我认为您可以使用其中的一些逻辑。搜索时缓冲区为空时的低缓冲区阈值应有助于继续播放。不过,Seek确实改变了很多事情。我不得不问,seek真的是客户所需要的吗?如果是用户发起的查找操作,则不会要求过多的用户来缓冲播放。这应该是一种可接受的用户体验。如果他们想寻找,他们应该愿意等待,直到他们的内容准备好。