我正在构建一个大型闪存站点(AS3),该站点使用巨大的FLV作为从部分到部分的过渡视频。 FLV为1280x800,并将其缩放到1680x1050(其中大部分未显示给屏幕较小的用户),并且每个人约为5-8秒。我正在使用ON2的HI-DEF编解码器,VP6-S编码视频,并且播放非常好,适用于本机FLV播放器,配备Perian的QuickTime以及AS3中构建的简单概念证明FLV播放应用程序。

我遇到的问题是,在实际站点的上下文中,播放不那么流畅。帧速率并不像应有的那样好,而且在问题上,偶尔会出现混乱和掉落的框架(有时会暂停视频长达四分之一左右)。我的猜测是,这是由Flash Player中的垃圾收集引起的,该收集是非确定性的,因此很难测试和控制。

我正在使用flvplayback的一个实例来播放视频。我最初是在使用NetStream对象,依此类推,但切换到FlvPlayBack的 这个原因. 。有没有人使用flvplayback(或更普遍地使用Hi-Def Flash视频)经历过这种混蛋?我对GC是这里的罪魁祸首是正确的吗?

有帮助吗?

解决方案

FLV/F4V播放中的混蛋几乎不是垃圾收集的结果 - 视频实际上一直保持在记忆中,直到完全卸载,因此根本没有发生垃圾收集(除非您做了某件事 非正统 就像将视频放在带有CacheasBitMap的容器上,将视频设置为true)。

如果您不需要特定的FLV功能,则切换到F4V(例如 Daidai发布的链接建议 - 免责声明,这是我的博客)会有所帮助,但总的来说,您还必须意识到任何影响屏幕上视频合成的内容。由于大尺寸的视频迫使将其重新渲染的所有内容重新渲染,因此任何小物体都会对性能产生重大影响。

您的视频顶部有东西吗?如果可能的话,请尝试摆脱它们,或将CacheasBitMap设置为true(如果不是动画)。这对于复杂的矢量图或文本非常有用(位图/图像绘制的速度要快得多)。如果它们具有不同的混合模式,那么您会被拧紧 - 您可以使用普通的混合模式吗?

在视频下面有什么吗?如果是这样,请在视频播放时摆脱它们(只是将可见性设置为false)。

要检查不必要的效果图,请以某种方式暂停视频,右键单击,打开“显示Redrawn Regions”(调试播放器)。您是否连续看到红色正方形图?然后背景上发生了一些事情,最好摆脱它。

您是否通过OnEnterFrame或计时器/间隔在后台发生任何事情?尝试暂停它。

您的视频30FPS和CG渲染是否可以使用(例如,可以使用Motion Blur)?如果是的,请尝试以24fps或之间的方式渲染 - 质量仍然不错,但数据解码和绘制的数据要少得多。

您可以使用较小的视频吗?即使您仍然以相同的尺寸渲染它们,较少的像素数据可以解码和渲染有助于极大的帮助,并且质量的影响可能很小。

这几乎总结了这一切。不过,摆脱屏幕上的其他所有内容通常是您的第一要务。

其他提示

您是否尝试过在H.264中编码视频? Flash Player现在支持他们一段时间,最终可能会更好地工作。这就是大多数在Flash使用中进行高清视频(例如YouTube,vimeo等)的内容。

就像测试一样,请尝试在YouTube上贴上1080p HD视频,看看是否为您停下来。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top