【问题标题】:Actionscript: NetStream stutters after bufferingActionscript:缓冲后 NetStream 卡顿
【发布时间】:2009-07-03 15:54:08
【问题描述】:

使用 NetStream 从 http 流式传输内容,我注意到 esp 具有某些导出的 h264,如果播放器遇到空缓冲区,它将停止并缓冲到请求的长度(如预期的那样)。

但是,一旦缓冲区已满,播放就不会继续,而是会向前跳,因此 - 在短时间内立即播放缓冲的持续时间,从而再次触发空缓冲区..然后这将继续结束了。

大概当网络流暂停缓冲时,播放头位置继续,并且播放器试图在恢复时捕捉到该位置 - 但是考虑到建立一个 2 秒的缓冲区可能需要 5 秒 - 它最终得到一个无用的缓冲区又来了。。

(这是一个假设)

我试图通过侦听空缓冲区 netstatus 事件、暂停流并同时设置一个循环来检查当前缓冲区长度与请求的缓冲区长度来解决此问题。缓冲区长度大于或等于请求的缓冲区..但是当没有足够的视频剩余时这会导致问题..例如,一个 10 秒的缓冲区只剩下 5 秒,循环只是坐在那里等待当只剩下 5 个时,缓冲区长度为 10 秒...

您会认为您可以简单地检查哪个更小,剩余时间或请求的缓冲区长度..但是 flash 给出的时间并不准确..

如果添加净流当前时间索引,加上缓冲时间,总时间不是电影的整个持续时间(结束时)。它很接近但不一样。

这让我回到了最初的问题,如果有其他方法可以解决这个问题,显然 flash 知道缓冲区何时准备就绪,那么如何在缓冲区准备好时让 flash 暂停,并在缓冲区准备好后恢复?目前它没有......它会暂停,然后一旦缓冲区已满 - 它会在大约 0.1 秒内播放整个缓冲内容。

提前致谢, 斯蒂芬。

【问题讨论】:

    标签: flash actionscript-3 video streaming


    【解决方案1】:

    好吧,大量搜索(哇,描述这个问题有多难)..我想另外这个问题与较低的带宽有关,很多人可能不会测试这个场景..

    所以无论如何,很多人遇到这个问题 - 似乎取决于编解码器设置 - 可能是关键帧或流媒体提示的工作方式。我不知道。

    我所知道的是,这不应该是玩家关心的问题,flash 再次成为一个巨大的失望..

    但是,我确实设法解决了这个问题,如果您侦听 netstatus 事件并等待空缓冲区事件,则暂停流。理想情况下,现在您侦听缓冲区已满事件,并且恢复它——但由于流已暂停——缓冲区没有建立(当然,视频仍在加载中)。

    如果你现在设置一个计时器(我在进入帧上设置了一个事件),并监听两个条件之一变为真:

    • a) 缓冲区长度大于 或等于 bufferTime(实际 缓冲区至少是请求的缓冲区 大小)
    • b) 加载的字节数 等于总字节数

    条件 A 还不够,因为在视频结束时,由于剩余时间较少,bufferLength 可能无法适应请求的缓冲区大小,此时检查当前播放头位置 + 实际缓冲区长度即可不等于电影的持续时间,所以这就是需要条件 B 的原因,您检查实际电影是否已完全加载,并且可以播放。

    如果对任何人有用的话,这是我的代码:

    function onNetStatus(e:NetStatusEvent):void
    
        if (e.info.code == "NetStream.Buffer.Empty") {
    
            ns.pause();
    
            playerRoot.addEventListener(Event.ENTER_FRAME, function() { 
                if (ns.bufferLength >= ns.bufferTime || ns.bytesLoaded == ns.bytesTotal) {
                    playerRoot.removeEventListener(Event.ENTER_FRAME, arguments.callee);
                    ns.resume();
                }
            });
        }
    }
    

    干杯。

    【讨论】:

      【解决方案2】:

      我从未遇到过您描述的问题。每个视频都会出现这种情况吗?

      您可以尝试的一件事是使用 JW Player 流式传输您的视频,看看是否会发生同样的问题 (http://www.longtailvideo.com/players/jw-flv-player/)。这是一个内置在 AS3 中的开源视频播放器。

      【讨论】:

      • 嗨大卫,不,它不会发生在每个视频上 - 所以大概是编码问题......这是一场噩梦。它从 camtasia 编码为 h264,每秒关键帧。我想我会尝试一些不同的导出来尝试解决问题 - 如果我找到它,我会发回。谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-01-19
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2014-02-08
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多