如果我不断循环播放 Adobe Animate (Flash) 视频,会导致内存问题吗?
Posted
技术标签:
【中文标题】如果我不断循环播放 Adobe Animate (Flash) 视频,会导致内存问题吗?【英文标题】:If I continually loop an Adobe Animate (Flash) video will it cause memory issues? 【发布时间】:2017-05-07 05:49:05 【问题描述】:在我在 Adobe 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 中提到的代码类似,因此未包含在此答案中。
在 Adobe 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
【讨论】:
以上是关于如果我不断循环播放 Adobe Animate (Flash) 视频,会导致内存问题吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何播放动画,然后在悬停时反向播放,再次开始播放,直到在 Adobe Animate (Flash) 中使用悬停结束?
For 循环无法在 Adobe Animate CC 中创建多个矩形
想要一个 Adobe Animate CC 横幅广告循环 2 次
无法在 Adobe Edge animate CC 中创建圆形阴影