50

我目前正在开发具有分辨率切换功能的 Flash 网络播放器。我正在尝试play2()在 Actionscript 中使用 NetStream 类的功能。

我遇到的问题是视频不会很快改变。对于那些熟悉该play2()功能的人,我相信玩家正在执行 a"standard switch"而不是 a"fast switch."

文档说当偏移参数为-1时,会发生快速切换。实际发生的情况是,一旦"NetStream.Play.Transition"收到事件,玩家会等到ns.time + ns.bufferLength到达 表示的时间,然后再执行切换。

我以为快速切换会清除缓冲区,但在检查到 时ns.backbufferlength,我发现所有内容都仍在缓存中。它还提到:“当偏移量为-1时,切换发生在之后的第一个可用关键帧处netstream.time + 3,”这就是我感到困惑的原因。

对此问题的任何帮助/见解将不胜感激。

这是一段描述正在发生的事情的代码片段(newStream()当用户单击以更改为新分辨率,youtube 样式时调用):

public function newStream(address:String):void
{
    var opts:NetStreamPlayOptions = new NetStreamPlayOptions();
    opts.streamName = address;
    opts.transition = NetStreamPlayTransitions.SWITCH;
    opts.offset = -1;
    ns.play2(opts);
}

private function nsCallback(event:NetStatusEvent)
{
    switch(event.info.code)
    {
        case "NetStream.Play.Transition":
        {
            trace("Current time (on Transition): " + 
                  ns.time, "Buffer: " + ns.bufferLength);
            var estTime:Number = ns.time + ns.bufferLength;
            trace("Estimated Completion Time: " + estTime);
            break;
        }
    }
}
4

2 回答 2

1

正如文档所说:“偏移量的默认值为-1,它将切换行为默认为标准。在这种模式下,服务器从收到切换调用的点开始及时确定流之间的良好过渡点,并且在那个时候切换。”

因此,您必须将“offset”参数更改为高于当前播放时间(Netstream.time)的值。如果值小于,则发送 NetStream.Play.Failed 状态事件。

于 2012-12-28T11:33:04.920 回答
1

可能是服务器试图找到离当前偏移最近的 i-frame,这需要时间。如果您知道 FPS 是什么以及两个 i-frame 之间的时间,您可以尝试寻找非常接近下一个或前一个 i-frame 的时间,这将加快搜索和服务速度。

有关 i-frame 的更多信息:http ://en.wikipedia.org/wiki/Video_compression_picture_types

于 2013-01-30T13:34:51.357 回答