c# - 在 C# 中获取 Flash 文件的运行时间的最可靠方法是什么?

标签 c# flash

我一直在尝试找到一种可靠的方法来获取 C# 应用程序中 flash (swf) 文件中包含的视频或动画的时间长度。我找到了一些显示如何读出标题的引用资料,但是标题存在一些问题。

  1. 我已经针对我们公司的几个文件(由外部机构生成)运行了代码,这些文件的帧数为零,这在浏览器中运行时显然是不正确的。
  2. 当文件确实包含信息时,不同版本的 Flash 的 header 并不一致。我什至找不到 Flash 7 之前存在的旧 header 的副本。没有的话,即使对于尊重 header 的文件,我也不知道 7 之前的哪个版本是最后一个具有不同 header 格式的版本。

作为引用,我正在开发的应用程序不会尝试显示该文件,也不会嵌入它。我只是想记录一下它的运行时间。

最佳答案

Flash 文件的工作方式与您想象的不同,因此您无法通过读取 SWF 来获取其“运行时”。

您可以读取 SWF 来获取主时间轴中的帧数,但大多数 Flash 应用程序和电影在主时间轴上只有 2 帧。然后,这些帧之一将嵌入一个本身可以具有任意数量帧的 MovieClip,或者嵌入另一个也具有可变数量帧的 MovieClip。是的,子级 MovieClip 可以拥有比父级更多的帧,并且 Flash 会适本地播放它们。

除了嵌入式 MovieClip 的小复杂性之外,您还可以使用 ActionScript,它可以导致 Flash 跳转或重播帧,这使得源 SWF 中的帧数与实际播放的帧数完全无关。事实上,大多数 Flash 应用程序在 SWF 中确实只有两个帧,但在运行时播放时将有数千或数百万个帧 - 它只是通过 ActionScript 生成内容一遍又一遍地播放同一帧。

可靠地获取运行时帧计数的唯一方法是创建一个 Flash 应用程序来加载另一个 SWF、播放它并计算帧数。如果加载的 SWF 是交互式的,则每次运行的数量可能会有所不同。也就是说,这是一个可以自动化的过程,但您需要在 ActiveX 容器中运行 Flash Player,以便可以与之通信以获取结果,或者让服务监听发布的数据。

关于c# - 在 C# 中获取 Flash 文件的运行时间的最可靠方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050398/

相关文章:

flash - AS3 - 如何找到对象相对于舞台的位置?

flash - 有哪些不错的 Flash 游戏框架?

actionscript-3 - 羽毛按钮启用属性

c# - iOS 上的 Xamarin 中所选 TabBarItem 的背景颜色

c# - 将 .NET 分析器的目标框架升级到 .NET 5.0 会产生什么后果?

c# - 使用 BlockingCollection 对任务进行排队

flash - 有没有一种方法可以使用自定义的NON FLASH皮肤嵌入youtube视频,以便在我的常规网站和移动网站上都支持该视频?

C# 谷歌登录

c# - 根据内部列表使用 .notation 对对象列表进行排序

json - 在 Actionscript 中获取并解析 JSON