1

我正在尝试获取 c# 中音频文件的持续时间。我得到以下代码在我的本地机器上工作,但是当我将它部署到 Windows Server 2008 盒子时,它总是为 .avi 和 .wav 文件返回 0 的持续时间。

WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();
    IWMPMedia mediaInfo = wmp.newMedia(filePath);
    return mediaInfo.durationString

我在服务器上安装了 windows media player 11。

非常感激任何的帮助

4

3 回答 3

2

我没有使用“WindowsMediaPlayerClass”的经验,但我已经广泛使用 TagLibSharp,这是我尝试用于此类事情的 - 它支持非常广泛的格式,这使得它的 API 比内置的更有用.NET 中的支持

http://developer.novell.com/wiki/index.php/TagLib_Sharp

很可能简单地使用 TagLibSharp 就可以解决您的问题。

(请注意,taglibsharp 由 banshee 项目维护,但显然出于历史原因托管在 @novell。我不知道细节,但这可能会使与开发人员的联系有点混乱)

于 2009-08-20T11:25:38.147 回答
2

要检索时长信息,必须先打开媒体文件。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd564790(v=vs.85).aspx#Y656

要检索不在用户库中的文件的持续时间,您必须等待 Windows Media Player 打开文件;也就是说,当前OpenState必须等于MediaOpen。您可以通过处理AxWindowsMediaPlayer._WMPOCXEvents_OpenStateChange事件或定期检查AxWindowsMediaPlayer.openState的值来验证这一点。

该链接还包含 C# 的示例代码。

如果您不喜欢播放视频,可以使用 IWMPMedia 类:

http://johndyer.name/post/Retreiving-the-duration-of-a-WMV-in-C.aspx

于 2011-10-08T16:30:52.057 回答
1

我的猜测是没有安装媒体播放器(默认情况下它不是在服务器 SKU 上)。

您是否尝试安装桌面体验包?

于 2009-08-22T01:27:11.227 回答