【问题标题】:NetStream: dual threshold buffering, and seeking beyond bufferNetStream:双阈值缓冲,超缓冲寻找
【发布时间】:2015-01-11 19:06:51
【问题描述】:

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

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

【问题讨论】:

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

标签: actionscript-3 flash buffering netstream


【解决方案1】:

我的解决方案是在每次搜索时重置缓冲时间。您仍然会收到 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));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2011-01-19
    • 2011-06-28
    • 1970-01-01
    • 2011-03-05
    • 2011-08-20
    相关资源
    最近更新 更多