错误?在初始停顿然后寻求后,Netstream将不会恢复

时间:2009-08-27 19:32:28

标签: actionscript-3 netstream

我遇到了一些奇怪的行为,我找不到任何记录 知识。

以下是发生的事情:

调用play()方法后,NetStatus代码暂停一个netstream 是“NetStream.Play.Start”。这会自动禁用默认行为 播放。在使用 togglePause()或resume()恢复之前,请执行搜索 操作。当您尝试使用togglePause()或resume()恢复时, netstream不会再开始播放了。

如果你只是立即暂停(),那么resume()之间没有seek(),它 恢复正常。

此外,如果您将初始暂停延迟约250毫秒,则可以搜索()和 随后恢复()没有问题。

我在这里发布了一个演示和来源: http://drinkspiller.cannonballinteractive.com/temp/ResumeAfterPauseAndSeek/

代码是直接来自带有次要的NetStream的AS3文档的示例代码 添加处理初始暂停并处理搜索和恢复按钮。 它并不多。

请注意,我通过调用stream.seek(0)然后调用stream.pause()来暂停;这个 确保第一帧显示在视频实例中而不是任何内容。相同 行为发生在没有stream.seek(0)且仅使用stream.pause()停止的情况下 回放。

我也尝试将调用延迟到startPaused();直到缓冲区满事件 代码,但行为是相同的。

任何人都可以帮我找到明智的解决方法,或者向我确认这是一个 错误?非常感谢!

2 个答案:

答案 0 :(得分:3)

肯定存在一些漏洞(以及一些糟糕的文档)。但是,我认为您的样本存在两个潜在问题:

  1. 我认为在接收有关FLV的元数据之前调用NetStream.seek并不是一个好主意。 (考虑从元数据中提取持续时间)。我不知道是否有关于此的官方文档,但我从经验中发现它可能有问题。您可以尝试在onMetaData事件处理程序中放置任何暂停/搜索事件。

    我有限的理解是元数据与FLV数据一起包含在内。它可以在任何地方,但理想情况下,它通常位于文件的前面。因此,在逐步下载时,NetStream必须接收足够的信息以获取所需的元数据,以便使用视频执行更高级的操作(如搜索)。这可以解释为什么在暂停250毫秒时它适用于你。

  2. 您的样本FLV的编码方式与我使用的其他FLV的编码方式不同。我不确定为什么,但是如果我改为引用不同的FLV,那么一切都很顺利(问题#1解决之后就是。)

    我想也许你的样本FLV只是缺少关键帧,这是寻求所必需的。我尝试重新编码以包含关键帧,但它仍然无法正常工作。我不确定那个FLV有什么不同,如果有人能指出这一点,我发现它也非常有用。

  3. 关于使用搜索(0)调用以确保有海报框架...我自己没有必要这样做。这也可能与FLV的编码方式有关。

答案 1 :(得分:1)

如果你做netstream.seek(0);它再次调用您的元数据处理程序