NetStream:双阈值缓冲,并寻求超越缓冲区



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

编辑:我可能应该提到我正在使用缓冲区内搜索(智能搜索)。我认为如果我不是,这将不是问题,因为闪存会在未启用此功能的情况下在每个搜索中刷新缓冲区。

对我来说,解决方案是重置每次搜索的缓冲时间。您仍将获得 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));
});

相关内容

  • 没有找到相关文章

最新更新