3

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

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

我正在使用 FLVPlayback 的单个实例来播放视频;我最初是直接使用 NetStream 对象等,但出于这个原因切换到 FLVPlayback 。有没有人在使用 FLVPlayback(或更一般地说,使用高清 Flash 视频)时经历过这种抽搐?我认为 GC 是罪魁祸首是对的吗?如果是这样,在播放这些系统密集型转换期间有什么方法可以防止它发生吗?

4

3 回答 3

4

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

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

你在视频上面有东西吗?如果可能,请尝试摆脱它们,或将 cacheAsBitmap 设置为 true(如果它们没有动画)。这对于复杂的矢量图或文本特别有用(位图/图像的绘制速度要快得多)。如果他们有不同的混合模式,你有点搞砸了——你能用普通的混合模式代替吗?

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

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

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

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

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

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

于 2010-09-03T14:04:32.070 回答
0

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

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

于 2010-04-22T23:32:05.950 回答
0

查看http://zehfernando.com/2010/benchmarking-video-playback-performance-in-flash/

于 2010-09-03T04:01:59.597 回答