如果我不断循环播放 Adob​​e Animate (Flash) 视频,会导致内存问题吗?

Posted

技术标签:

【中文标题】如果我不断循环播放 Adob​​e Animate (Flash) 视频,会导致内存问题吗?【英文标题】:If I continually loop an Adobe Animate (Flash) video will it cause memory issues? 【发布时间】:2017-05-07 05:49:05 【问题描述】:

在我在 Adob​​e Animate (Flash) 中构建的信息亭可执行文件中,我使用 FLVPlayback 组件作为视频点唱机。简单的设计:一个循环的主屏幕视频,上面覆盖有用于交换视频源的按钮,然后在完成时切换回主视频。

我的此循环的 ActionScript 包含一条跟踪消息:

video_viewer.addEventListener(fl.video.VideoEvent.COMPLETE, videoSwitcher);
function videoSwitcher(e:Event)

  if (video_viewer.source == "video/Home.mp4") 
    trace("I'm Home and I'm looping!");         
   else 
    trace(video_viewer.source + " is done so I'm switching to Home!");
    video_viewer.source = "video/Home.mp4";
  
  video_viewer.seek(0);
  video_viewer.play();

我的问题是,如果家庭视频在客户的展会上运行时每天循环数百或数千次,重复的跟踪消息最终会导致内存问题吗?

【问题讨论】:

【参考方案1】:

我最近进行了一个简短的测试,以确定 Flash Player 在长期运行和重复调用 trace() 函数时是否使用更多内存。

测试场景: 120 fps 的 400 x 400 舞台 重复播放一个 5 分钟的视频,并在每个输入帧上进行跟踪。

import flash.events.Event;

this.addEventListener(Event.ENTER_FRAME,fps);
function fps(e)
    trace("A really long sentence to test whether trace eats up memory over time.");

注意:视频循环代码与 OP 中提到的代码类似,因此未包含在此答案中。

在 Adob​​e Animate 中按<Ctrl>+<Enter> 键盘键进行第一次测试。发现:长期使用内存不断增加(2 分钟内约 54MB)。

在发布设置中禁用“省略跟踪语句”的 swf 后进行第二次测试。发现:即使我们在长期内继续增加内存使用量看不到跟踪输出(2 分钟内约 36MB)。

在发布设置中启用了“省略跟踪语句”发布 swf 后的最终测试。发现:继续增加内存使用量,达到 ~25MB 使用量,然后一直在 25MB 和 28MB 之间波动,但从未超过 28MB。

因此,我得出结论,我们应该在发布设置中启用“省略跟踪语句”选项,以防止由于trace() 而导致的意外内存泄漏。我假设,当它被禁用时,trace() 日志被保留用于遥测目的。

PS: AVM 使用垃圾收集器 (GC),因此可能有其他因素导致某些对象即使在未使用后也没有被 GC,最终会使您的 swf 文件占用更多内存。查看此帖子以了解有关内存管理的更多信息:Actionscript memory management, garbage collection

【讨论】:

以上是关于如果我不断循环播放 Adob​​e Animate (Flash) 视频,会导致内存问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何播放动画,然后在悬停时反向播放,再次开始播放,直到在 Adob​​e Animate (Flash) 中使用悬停结束?

For 循环无法在 Adob​​e Animate CC 中创建多个矩形

想要一个 Adob​​e Animate CC 横幅广告循环 2 次

无法在 Adob​​e Edge animate CC 中创建圆形阴影

jQuery 替代 Adob​​e Edge Animate?

从 Adob​​e Animate 中打开的 FLA 文件中导出所有项目