3

我正在构建一个大型Flash网站(AS3),它使用巨大的FLV作为部分之间的过渡视频。 FLV是1280x800,并且被缩放到1680x1050(其中大部分不显示给屏幕较小的用户),并且大约每个5-8秒。我使用On2的高清编解码器VP6-S对视频进行编码,播放效果与原生FLV播放器,配备Perian的Quicktime以及内置AS3的简单概念验证FLV播放应用程序相当不错。FLV性能和垃圾收集

我遇到的问题是,在实际网站的上下文中,播放不够流畅;帧速率并不像应该的那样好,更有问题的是偶尔会出现晃动和丢帧(有时会暂停视频长达四分之一秒左右)。我的猜测是,这是由Flash播放器中的垃圾收集引起的,这种情况不确定,因此难以测试和控制。

我正在使用FLVPlayback的单个实例来播放视频;我最初直接使用NetStream对象等,但切换到FLVPlayback为this reason。有没有人经历过FLVPlayback(或者更普遍的是,使用高清Flash视频)的这种颠簸?我说得对,GC是这里的罪魁祸首,如果是这样,在播放这些系统密集型转换时,是否有办法阻止它?

回答

4

跳动的FLV/F4V播放几乎没有垃圾收集的结果 - 视频实际上是保存在内存中,直至其完全卸载,所以没有垃圾收集发生在所有的(除非你已经做了一些非正统的,比如将视频放在容器上,cacheAsBitmap设置为true)。

如果您不需要特定的FLV功能(如the link posted by daidai suggests - 免责声明,这是我的博客),切换到F4V将有所帮助,但总体而言,您还必须了解影响视频合成的任何内容。由于大尺寸视频会强制重叠的所有内容重新渲染,因此任何小对象都会对性能产生重大影响。

你在视频的顶部是否有东西?尝试摆脱它们,如果可能的话,或将cacheAsBitmap设置为true(如果它们没有动画)。这对于复杂的矢量绘图或文本特别有用(位图/图像绘制速度要快得多)。如果他们有不同的混合模式,那么你有点搞砸了 - 你可以使用正常的混合模式吗?

视频下方是否有任何内容?如果是这样,请在视频播放过程中摆脱它们(将可见性设置为false)。

要检查不必要的渲染,以某种方式暂停视频,右键单击,打开“显示重绘区域”(调试播放器)。你是否连续看到红色方格画?然后在背景上发生了一些事情,更好地摆脱它。

通过onEnterFrame或定时器/间隔在背景上发生了什么?尝试暂停它。

你的视频是30fps,还是CG渲染(例如,可以使用运动模糊)?如果是,请尝试以24fps的速度渲染,或者介于两者之间 - 质量仍然很好,但要解码和绘制的数据要少得多。

你可以使用较小的视频吗?即使你仍然在渲染它们的大小相同,解码和渲染的像素数据也会非常有限,并且对质量的影响可能非常小。

这几乎总结了一切。摆脱屏幕上的其他一切通常是您的首要任务。

0

您是否尝试过使用H.264编码视频? Flash播放器现在支持它们一段时间,它可能会更好地工作。这就是大多数人在Flash中使用高清视频的原因(例如Youtube,Vimeo等)。

就像一个测试,尝试在youtube上播放1080p高清视频,看看你是否暂停。

+0

其实,是的,在安置VP6-S之前,我们尝试了很多格式。我们对H.264的实验并不详尽,因为有很多不同的配置可供尝试,但总的来说,即使使用H.264中系统密集度最低的配置文件,我们使用VP6获得了更好的性能和文件大小-S。尽管如此,我很乐意接受这种可能性。您是否可以为高清高动态Flash视频提供优化H.264编码设置和工具的良好资源? – justinbach 2010-04-23 14:50:30