【问题标题】:Detecting a MOV file's duration检测 MOV 文件的持续时间
【发布时间】:2011-07-06 12:37:33
【问题描述】:

我有一个用 C# 编写的客户端应用程序,想要读取 MOV 文件的持续时间。我必须在 Windows 窗体中创建和托管 Quicktime COM 控件,然后在其中加载电影并获取持续时间。在我的情况下这是不可行的,因为客户端应用程序不是 Windows 窗体。

我实际上已经完成的另一种方法是打开 MOV 文件原始文件,检查字节,直到超过剪辑的电影头原子 ('mvhd') 12 个字节,然后获取时间刻度和从那里的持续时间。我不喜欢这种 hack,因为如果 Apple 将来更改文件格式,它可能无法正常工作。

我宁愿避免将 MOV 加载到控件,因为我只对获取剪辑的持续时间感兴趣,而不是其他任何内容。理想情况下,我需要为应用程序提供一个带有 mov 文件路径的字符串,并获得这样的持续时间。有人用非托管代码做过吗?

【问题讨论】:

  • 为什么不能在非 Windows 窗体应用程序中使用相同的 COM 对象?或者它只是一个控件
  • 它是一个控件,因此需要一个主机来“活”。
  • 鉴于 .mov 的寿命,是否可以肯定地说他们此时更改标头的可能性很小?另外,请注意,必须有大量依赖相同信息的玩家。找到用于定义 .mov 文件布局的文档并从那里进行开发。

标签: c# quicktime duration clip mov


【解决方案1】:

首先,没有“内置”方式来处理特殊文件格式。您必须自己解析文件,或者让一些组件为您解析。

事实上,只要您的代码符合文档的要求,解析就不是一种黑客行为。您应该获得(如果是某些公司,购买)官方格式规范,并根据规范解析文件头。规范是强制性的,因此您不应期望相同文件类型的格式会发生变化。

您可以尝试找到一个可以为您完成此任务的组件。包含用于显示电影的控件的库也可以包含一些实用程序类。当然,组件会以与您完全相同的方式解析标头,因此如果 Quicktime 格式发生变化(我个人对此表示怀疑),所有组件都会以同样的方式失败。

【讨论】:

    【解决方案2】:

    读取原始文件是正确的做法。

    【讨论】:

    • 您有没有机会指出我将如何阅读原始文件?这只是将文件加载到流中并循环吗?
    • @AbeMiessler 开始阅读此内容en.wikipedia.org/wiki/ISO_base_media_file_format。您可以在 Google 上查看规格,我认为 ISO/IEC 14496 是您正在寻找的标准
    【解决方案3】:

    对于阅读这篇文章的未来用户,您可以从以下链接中找到描述 .mov 文件格式的 Apple Quick Time 文件格式文档:

    Classic Version of the QuickTime File Format Specification:

    Actual PDF describing the Classic Version of the QuickTime File Format Specification

    Current Version of the QuickTime File Format Specification

    【讨论】:

      【解决方案4】:

      如果您想查找 quicktime .mov 文件和其他媒体容器的持续时间或其他信息,还有另一种好方法可以让您选择后者来改进您的应用程序:使用 MediaInfo.dll您可以在您的项目中引用它并找到持续时间以及媒体文件的几乎所有其他方面。

      【讨论】:

        猜你喜欢
        • 2015-05-29
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 2016-02-10
        • 2013-05-12
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多