2009-08-20 20 views
1

Ich versuche, die Dauer für eine Audiodatei in C# zu erhalten. Ich habe den folgenden Code, um auf meinem lokalen Computer zu arbeiten, aber wenn ich es auf eine Windows Server 2008-Box bereitstellen, gibt es immer eine Dauer von 0 für .avi und .wav-Dateien.Dauer der Audiodatei ermitteln C#

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

Ich habe Windows Media Player 11 auf dem Server installiert.

Jede Hilfe wäre die meisten

geschätzt werden

Antwort

2

Ich habe keine Erfahrung mit „WindowsMediaPlayerClass“, aber ich habe TagLibSharp ausgiebig, mit dem ist, was ich für solche Dinge zu nutzen versuchen - es unterstützt eine ziemlich breite Palette von Formate und das macht es API viel besser benutzbar, dass die Unterstützung .NET in-eingebauten

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

Ganz möglicherweise einfach TagLibSharp mit Ihren Probleme lösen.

(Beachten Sie, dass taglibsharp durch das Banshee-Projekt beibehalten wird, ist aber für scheinbar historischen Gründen @ novell gehostet. Ich nicht über die Details wissen, aber das kann die Devs etwas verwirrend kontaktieren)

1

Meine Vermutung ist, dass der Media Player nicht installiert ist (es ist nicht standardmäßig auf Server-SKUs).

Haben Sie versucht, das Desktop Experience Package zu installieren?

+0

Dieses hier, um Ihre Antwort völlig unabhängig ist, aber ich hatte gehofft, dass die Aufmerksamkeit auf diese Frage ziehen Ich fragte vor ein paar Tagen: http://stackoverflow.com/questions/1303811/what-is-the-latency-or-delay-time-for-callbacks-from-the-waveoutwrite-api-metho – MusiGenesis

2

Um Dauerinformationen abzurufen, muss die Mediendatei zuerst geöffnet werden.

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

Um die Dauer für Dateien abzurufen, die nicht in der Bibliothek des Benutzers sind, müssen Sie für Windows Media Player warten, um die Datei zu öffnen; das heißt, der aktuelle OpenState muss gleich MediaOpen sein. Sie können dies überprüfen, indem Sie das Ereignis AxWindowsMediaPlayer._WMPOCXEvents_OpenStateChange behandeln oder indem Sie den Wert AxWindowsMediaPlayer.openState regelmäßig überprüfen.

Die Verknüpfung enthält auch Beispielcodes für C#.

Wenn Sie das Video nicht spielen möchte, können Sie die IWMPMedia Klasse verwenden:

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