2011-07-06 56 views
0

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

这样做的另一种方法,我实际上是这样做的,就是打开MOV文件raw,检查字节,直到12个字节超过剪辑的电影头原子('mvhd')并获得时间刻度和从那里的持续时间。这个黑客我不舒服,因为如果Apple在将来更改文件格式,它可能无法正常工作。

我宁愿避免将MOV加载到控件上,因为我只想获取剪辑的持续时间,而没有其他的东西。理想情况下,我需要为应用程序提供一个带有mov文件路径的字符串,并获得这样的持续时间。有没有人用非托管代码完成它?

+0

为什么不能在非Windows窗体应用程序中使用相同的COM对象?或者它只是一个_control_? – Vlad

+0

这是一个控件,因此需要一个主机来“活”。 – Michali

+1

鉴于.mov的长久性,在这一点上他们改变标题的可能性相当小吗?另外,请注意,那里依靠相同的信息必须有大量的玩家。查找用于定义.mov文件布局并从此开发的文档。 – KevinDTimm

回答

5

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

事实上,解析不是黑客,只要您的代码遵守文档。你应该得到(在某些公司的情况下,购买)官方格式规范,并根据规范解析文件头。规范是强制性的,所以你不应该期望格式为相同的文件类型改变。

你可以尝试找到一个组件,它会为你做。包含显示电影的控件的库也可能包含一些实用程序类。当然,这个组件会以完全相同的方式解析标题,所以如果Quicktime格式会改变(我个人怀疑),所有组件都会以相同的方式失败。

+0

+ 1(但我会编辑说'解析不是黑客')。 – KevinDTimm

2

读取raw文件是正确的做法。

+0

任何机会,你可以指示我如何去读原始文件?这只是将文件加载到流中并循环播放? –

+0

@AbeMiessler请阅读本文,了解http://en.wikipedia.org/wiki/ISO_base_media_file_format。你可以通过谷歌的规格,我认为ISO/IEC 14496是你正在寻找的 – James

-1

还有另一种好办法可以做到这一点,如果您想要查找quicktime.mov文件加上其他媒体容器的持续时间或其他信息,将为您提供后期选项以改进您的应用程序:使用MediaInfo。你可以在你的项目中引用它,并找到持续时间加上媒体文件的几乎所有其他方面。