我的网站完全基于Flash,它围绕着3D模型移动,该模型是作为我转换为FLV文件的视频片段提供给我的。 我正在使用FLVPlayback组件来控制程序中的视频。 使用System.totalMemory运行内存检查时,我注意到,每当加载视频时,它都会吃掉一块内存,即使当我从其中删除所有事件监听器(它们都被弱引用)时,也要从中删除该组件。它的父对象,停止视频并使该组件实例为空,它仍将不退还该内存。

自从我开始从事这个项目以来,这一直困扰着我,因为用户可以实例化和加载大量视频。 当前,每当需要时,每个视频都被加载到新的FLVPlayback实例中,但是我已经读到,解决此问题的最佳方法可能就是简单地拥有一个全局FLVPlayback实例,然后将新视频重新加载到旧实例中。应用程序的内存中只有一个FLVPlayback组件。

还有其他人也遇到这个问题吗? 您是否找到了比仅对每个新视频都重复使用的全局实例更好的解决方案?

===============>>#1 票数:2

我从未真正喜欢过这些组件,它们有点狡猾。 这个特殊的问题似乎很常见,而且,正如您所建议的那样,有点烦人的解决方案是仅具有一个FLVPlayback并重新使用它。

这是关于它的博客文章

===============>>#2 票数:1

经过大量测试之后,我得出的结论是,闪存会根据需要动态加载库和组件,但绝不会垃圾收集该数据。 例如,如果我有一个使用FLVPlayback组件的网站或Air应用程序,则在创建新的FLVPlayback()实例之前,不会加载与之关联的实际组件和库。 然后它将被加载到库和组件中到内存中,但是在程序/网站关闭之前,您永远不会收回该空间。 只要您从其中删除侦听器,将其移出舞台并将其设置为null,该特定实例(其中包含视频)就会被垃圾收集并释放一些内存。

另外,如果您要制作单独的视频,VideoPlayer的重量也更轻,并且清理效果更好。

===============>>#3 票数:1 已采纳

不幸的是,在Flash添加析构函数和显式对象删除之前,您无法解决很多内存问题。 看到这个线程:

在ActionScript 3中卸载ByteArray

Flash applet可以使用多少内存是有限制的。 GC似乎会在达到该限制时触发。 我已经看到我容易记忆的applet会使用多达200MB的内存,只是因为它们连续运行了几个小时,而GC却不想启动。

哦,我也不认为使用单个实例是一种优雅的解决方案。 目前,我只是为我的自定义类编写一个dispose()函数,等待一天可以将其转化为适当的析构函数。

===============>>#4 票数:1

感谢您的答复,指向其他博客问题的链接也很有用,我也阅读了Grant Skinner关于垃圾收集的所有信息,但是搜索这些链接并返回并重新阅读他最初对GC的说法有所帮助刷新旧的头。 除了将单个FLVPlayback组件置零并重新实例化之外,我还意识到我也没有正确地卸载和销毁我的Loader实例,因此我对其进行了清理,现在程序运行效率更高。 我想说该站点的内存使用量已提高了90%左右。

@aib我将承认单实例解决方案不是很好,但是由于Flash不会放开那些FLV文件,因此我有点受其困扰。

@grapefrukt我讨厌Flash组件,它们通常造成比节省时间更多的麻烦,但是在这种情况下,视频文件上有很多提示点和导航内容,而FLVPlayback组件是我发现的最佳解决方案。 当然,我对动作脚本世界还算陌生,所以也许我忽略了一些东西

我也希望我有声誉能够对您的两个答案都予以支持,因为它们都对您有帮助... c'est la vie

===============>>#5 票数:0

不幸的是,这就是Flash处理它的方式。 并不是特别聪明,但是它对大多数人有效。

  ask by vanhornRF translate from so

未解决问题?本站智能推荐:

1回复

Flash Video Player的内存问题

我制作了一个带有播放列表的视频播放器。 大约45分钟后,声音停止! 视频继续播放。 我播放短片(每个短片约3-4分钟)。 播放器基于2帧: 第1帧使用文件名定义变量VidReference: 第2帧播放视频: 视频播放完毕后,将转到第1帧(将新值放入VidRef
1回复

通过FLVPlayback组件播放byteArray flv

有什么方法可以通过FLVPlayback组件播放byteArray吗? 我想加载一个加密的视频,解密并播放。 我可以执行加载和解密部分,但是我不知道如何通过FLVPlayback组件播放它。 具有搜索功能和播放停止按钮。
3回复

Video对象和FLVPlayback组件有什么区别?

这两个对象在用途上有什么区别? 具有自定义外观和播放列表的“类似YouTube的”视频播放器应使用哪一个?
2回复

Flash FLVplayback在全屏模式下出现问题-内容消失

我正在设置一个视频播放菜单,该菜单可在Flash Player中作为exe 。 我在后台播放视频,按钮悬停在视频上方,然后用户可以播放不同的视频。 我不是程序员,但我对非常基本的actionscript3有一定的了解,我经常以较小的方式剪切和/或修改。 我的问题 :以全屏模式启动时:
1回复

Flash FLVPlayback状态

我正在编写自己的类来管理FLVPlayback组件的外观。 它在90%的时间内都有效,但是有时状态会变得一团糟。 具体来说,视频正在播放,这意味着我可以看到它正在播放,并且VideoEvent.PLAYHEAD_UPDATE事件正在触发,但是当我轮询FLVPlayback组件的播放属性时,它
1回复

FLVPlayback剪辑加载延迟

我正在Flash / AS3中构建一个叙述性的点击式自助服务亭应用。 当前,我正在时间轴上将几个(10个以上)本地加载的.flv文件加载到FLVPlayback组件中。 我遇到加载延迟,并且想知道这种情况下的最佳实践/最佳方案。 这些都使用“导入带有播放组件的外部视频”选项进行视频导入。
1回复

通过互联网流式播放FLVPlayback

我有一个Flash视频,大小为19 MB(5分钟),我希望用户查看到目前为止已加载的内容,甚至可以看到已加载的内容的指示-这样他就不会陷入困境空白屏幕,直到视频加载。 视频的质量很重要,因此我不会调整其大小-但如何: 流式传输,以便用户可以看到到目前为止已加载的内容 指示
1回复

我无法使用flvplayback和as3调整视频大小

我又做了一个Flash播放器,这次我们需要它来播放.mov并使用全屏功能和其他n种基本功能。 工作正常,我正在将flvplayback组件与as3一起使用。 现在的问题是,当视频为360x280时,视频的大小调整为240x240。 当我尝试类似的东西: 视频是我的flvpl
2回复

AS3内存管理

我对as3内存管理有疑问。 例如,如果我上课 我在主要课程中实例化该课程 这足以将c对象垃圾回收吗? 还是我还需要从c中删除a和b对象?
2回复

确定Flash组件何时不可见

我正在玩流媒体直播视频到Flash Player。 问题是,从我的日志中可以看出,许多用户将打开一个实时视频源,然后让它全天开放,无论他们是否真正在观看它。 可以想象,这是一个可怕的带宽浪费。 所以我想要一种方法来确定用户是否正在主动观看Feed,如果没有,请关闭它。 包含Flash