actionscript-3 - FLV 性能和垃圾回收

标签 actionscript-3 garbage-collection flv flvplayback flashplayer-10

我正在构建一个大型 Flash 网站 (AS3),它使用巨大的 FLV 作为部分之间的过渡视频。 FLV 为 1280x800,正在缩放至 1680x1050(其中大部分不会向屏幕较小的用户显示),每个大约 5-8 秒。我正在使用 On2 的高清编解码器 VP6-S 对视频进行编码,使用原生 FLV 播放器、配备 Perian 的 Quicktime 以及内置于 AS3 中的简单概念验证 FLV 播放应用程序播放效果非常好。

我遇到的问题是在实际站点的上下文中,播放不那么流畅;帧率不如应有的好,而且更成问题的是,偶尔会出现抖动和丢帧(有时视频会暂停四分之一秒左右)。我的猜测是,这是由 Flash 播放器中的垃圾收集引起的,它的发生是不确定的,因此很难测试和控制。

我正在使用 FLVPlayback 的单个实例来播放视频;我最初直接使用 NetStream 对象等,但为了 this reason 切换到 FLVPlayback| .有没有人在使用 FLVPlayback(或更一般地说,使用高清 Flash 视频)时遇到过这种抖动?我关于 GC 是罪魁祸首的说法是否正确?如果是这样,在播放这些系统密集型过渡期间有什么方法可以阻止它吗?

最佳答案

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

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

视频上方有东西吗?如果可能,尝试摆脱它们,或将 cacheAsBitmap 设置为 true(如果它们不是动画)。这特别适用于复杂的矢量绘图或文本(绘制位图/图像要快得多)。如果他们有不同的混合模式,你有点搞砸了——你能改用正常的混合模式吗?

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

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

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

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

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

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

关于actionscript-3 - FLV 性能和垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678594/

相关文章:

.net - 如何处置工厂模式创建的对象

c++ - 将 .FLV 文件转换为 MP3

javascript - 流媒体视频如何工作?

javascript - 使用 TLS (SSL) 从 flash v11+ 连接到 nodejs

.net - .NET 进程分配的内存何时释放回 Windows

flash - 获取视野中的随机点

java - 带有匿名 EventListener 的 JPanel - 为什么 GC 不破坏监听器?

flash - 从自定义 Web 服务器提供多个 flv 文件,同时保持套接字打开在第 6 个连接后停止

flash - 此[“instancename”]语法

javascript - flash as3 - 通过actionscript 3从DOM获取数据