什么';这是获取闪存文件最可靠的方法;s运行时以C#表示?

什么';这是获取闪存文件最可靠的方法;s运行时以C#表示?,c#,flash,C#,Flash,我一直在试图找到一种可靠的方法来获取C#应用程序中flash(swf)文件中包含的视频或动画的时间长度。我发现了一些说明如何读取标题的参考资料,但是标题有几个问题 我已经针对我们公司的几个文件(由外部机构制作)运行了代码,这些文件的帧数为零,在浏览器中运行时显然不是这样 当文件确实包含这些信息时,不同版本的flash之间的头不一致。我甚至找不到Flash7之前存在的旧标题的副本。没有这个,即使对于尊重头的文件,我也不知道7之前的哪个版本是最后一个具有不同头格式的版本 作为参考,我正在使用的应用程

我一直在试图找到一种可靠的方法来获取C#应用程序中flash(swf)文件中包含的视频或动画的时间长度。我发现了一些说明如何读取标题的参考资料,但是标题有几个问题

  • 我已经针对我们公司的几个文件(由外部机构制作)运行了代码,这些文件的帧数为零,在浏览器中运行时显然不是这样
  • 当文件确实包含这些信息时,不同版本的flash之间的头不一致。我甚至找不到Flash7之前存在的旧标题的副本。没有这个,即使对于尊重头的文件,我也不知道7之前的哪个版本是最后一个具有不同头格式的版本

  • 作为参考,我正在使用的应用程序不会试图显示文件,也不会嵌入文件。我只是想对它的运行时间进行分类。

    Flash文件的工作方式与您认为的不同,因此您无法通过读取SWF来获取它们的“运行时间”

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

    除了嵌入MovieClips的小复杂性之外,还有ActionScript,它可以导致flash跳转或重放帧,从而使源SWF中的帧数与实际播放的帧数完全无关。事实上,大多数Flash应用程序实际上在SWF中只有两个帧,但在运行过程中播放时,会有数千或数百万个帧——这只是同一个帧反复播放,ActionScript生成内容


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

    实际上,我理解这一点。我知道页眉不必包含帧,因为大多数flash用作其他内容(视频)的conatainer。这就是为什么我要问一个可靠的方法来获取这些信息。所以你会说使用interop与IE flash插件对话可能是最好的方式?@Seneca,是的,这是一种方式。您也可以同样使用独立flash player运行容器swf,只要有一种方法可以让它在完成时远程控制其帧数(调用本地web服务)。另一种方法听起来像是我考虑将其嵌入页面,并使用自动化将页面发送回ajax,看起来页面中的javascript可以与flash交互。@塞内卡,是的,JS可以与flash交互。查找
    外部接口