繁体   English   中英

NetStream:双阈值缓冲,并在缓冲区之外查找

[英]NetStream: dual threshold buffering, and seeking beyond buffer

是有关双阈值缓冲的有用文章。 它解释说,你可以听的NetStream.Buffer.FullNetStream.Buffer.Empty对事件NetStream和调整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));
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM