首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetStream:双阈值缓冲和超越缓冲区的搜索

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

Stack Overflow用户
提问于 2015-01-11 19:06:51
回答 1查看 546关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-13 23:31:08

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

代码语言:javascript
复制
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));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27890940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档