| |
Fortgeschrittene ProgrammierungLänge eines mp4 Videos ermitteln | | | Autor: Spitzbube66 | Datum: 17.01.24 13:32 |
| Hallo Gemeinde,
ich möchte die Länge von mp4 Videos ermitteln, nachdem ich sie in den Windows Media Player geladen habe. Mit der für mich logischen Methode:
Dim VideoLength As Double
VideoLength = WMP1.currentMedia.duration
funktioniert es leider nicht, ich bekomme immer nur die "0" als Rückgabewert. Hier in den Tipps und Tricks findet man den Artikel "Größe und Spieldauer eines AVI-Videos ermitteln" (https://www.vbarchiv.net/tipps/details.php?id=662), der aber bei mp4 Videos nicht weiter hilft. Google und ChatGPT (-> .currentMedia.duration) bringen mich ebensowenig voran.
So hoffe ich auf das Schwarmwissen hier und wäre für Lösungsansätze äußerst dankbar
Gruß Frank | |
Re: Länge eines mp4 Videos ermitteln | | | Autor: -Franky- | Datum: 17.01.24 19:16 |
| Hi
Mir fallen Adhoc 2 Möglichkeiten ein. Per Interface IPropertyStore und da liest halt die "System.Media.Duration" aus oder per MediaFoundation Interfaces/APIs per IMFSourceReader.GetPresentationAttribute -> MF_PD_DURATION. Mit diesen Infos solltest Du so einiges finden.
Mit freundlichen Grüßen
-Franky- | |
Re: Länge eines mp4 Videos ermitteln | | | Autor: Spitzbube66 | Datum: 17.01.24 20:34 |
| Hallo Franky,
Danke für die Unterstützung. Nach erster Recherche sieht es leider so aus, als ob das Ganze unter VB6 nicht funktioniert, da der Zugriff auf die Media Foundation API hier nicht gegeben ist. Ich finde auf die Schnelle auch kein Beispielprojekt dazu, hast Du da evtl. etwas?
Gruß Frank | |
Re: Länge eines mp4 Videos ermitteln | | | Autor: -Franky- | Datum: 17.01.24 23:10 |
| Hi
Ich gehe davon aus das Du ChatGPT zum Thema VB6 im Zusammenhang mit der MediaFoundation befragt hast und die Antwort von ChatGPT kann ich mir vorstellen. Mein Tipp: Frag niemals ChatGPT wenn es um das Programmieren geht. ChatGPT ist dumm. Ich kann Dir definitiv sagen, das die MediaFoundation bestens unter VB6 funktioniert und das man mit den richtigen Suchbegriffen (siehe unten) durchaus im Netz was dazu finden kann. Und was ist mit IProprtyStore? Klar hab ich Beispiele zu IPropertyStore und zur MediaFoundation. Besser ist es aber sich mit den Sachen auseinander zu setzen als fertigen Code zu kopieren und zu nutzen ohne zu verstehen was da passiert. Was ich Dir aber mitgeben kann ist ein Fahrplan wie das mit der MediaFoundation und/oder mit IPropertyStore funktioniert.
MediaFoundation:
1. API MFStartup(MF_VERSION_2, MFSTARTUP_FULL)
2. API MFCreateSourceReaderFromURL(MediaFile, 0&, IMFSourceReader)
3. IMFSourceReader.GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, PROPVARIANT)
4. ist PROPVARIANT.vt = VARTYPE.VT_UI8 ? -> PROPVARIANT.uhVal -> Duration
5. API PropVariantClear(PROPVARIANT)
6. IMFSourceReader.Release
7. API MFShutdown.
IPropertyStore:
1. API SHGetPropertyStoreFromParsingName(MediaFile, 0&, GPS_DEFAULT, IID_IPropertyStore, IPropertyStore)
2. IPropertyStore.GetValue(System.Media.Duration, PROPVARIANT)
3. ist PROPVARIANT.vt = VARTYPE.VT_UI8 ? -> PROPVARIANT.uhVal -> Duration
4. API PropVariantClear(PROPVARIANT)
5. IPropertyStore.Release
Um es Dir etwas einfacher zu machen, kannst ja die oleexp.tlb von vbforums nutzen: https://www.vbforums.com/showthread.php?786079-VB6-Modern-Shell-Interface-Type-Library-oleexp-tlb
Mit freundlichen Grüßen
-Franky- | |
Re: Länge eines mp4 Videos ermitteln | | | Autor: Spitzbube66 | Datum: 18.01.24 09:41 |
| Moin Franky,
vielen Dank nochmal für die Mühe. Grundsätzlich gebe ich Dir natürlich Recht, es ist immer besser Dinge zu verstehen, anstatt nur dumpf zu kopieren. Bei manchen Problemstellungen, so wie jetzt, finde ich hier, oder auf anderen Quellen im Netz, Lösungen, die ich dann für mein Projekt anpasse. Ich setze mich also schon mit der Funktionsweise auseinander und verstehe sie auch (größtenteils).
Finde ich im Netzt nichts Passendes, liefert ChatGPT teilweise Lösungsansetze die mich etwas weiter bringen, aber oft auch absolut nicht funktionieren.
Ich verstehe noch nicht, warum wmp.currentmedia.duration nicht das erwartete Ergebnis liefert. Ich versuche mich mal anhand Deiner Tipps schlau zu machen, für Alternativlösungen wäre ich trotzdem weiterhin dankbar.
Gruß Frank | |
Re: Länge eines mp4 Videos ermitteln | | | Autor: -Franky- | Datum: 18.01.24 10:38 |
| Hi Meine Empfehlung für Dich: Nutze die oleexp.tlb. Dann musst Du Dich nicht mit mit Pointern und VTables der COM-Interfaces herumschlagen. Einfach die TLB als Verweis in Deinem Projekt hinzufügen (evtl. brauchst auch die .bas-Dateien die unter Add-Ons aufgeführt sind). Da sollte alles drin sein (APIs/Interfaces) was Du brauchst. Ansonsten gibt es unter dem Link, wo man die oleexp.tlb herunterladen kann, mit Sicherheit auch Beispiele zur MediaFoundation und IPropertyStore die Du für Deine Bedürfnisse anpassen/abändern kannst.
Warum der WMP das nicht kann? Das kann mehrer Ursachen haben. Mit welcher Windowsversion bist Du unterwegs? Meine erste Frage wäre: Wenn Du im Explorer ein rechstklick auf die MP4 machst -> Eigenschaften, kannst Du da die Duration der MP4 sehen? Wenn ja, wäre IPropertyStore der erste Weg weil der Explorer ebenfalls IPropertyStore verwendet um entsprechende Daten auszulesen. Wenn nicht, dann ist eventuell der PreviewHandler für MP4 veränder worden (passiert evtl. wenn man ein anderes Programm installiert und dieses als Standardprogramm für MP4 zuweist und dieser seinen eigenen PreviewHandler installiert). Standardmäßig ist der WMP der PreviewHandler für MP4. Die MP4 könnte defekt sein. Es wird kein passender Decoder für MP4 gefunden. Die MediaFoundation selbst nutzt seinen eigenen Decoder und hat nichts mit dem WMP oder den PreviewHandlern zu tun.
Mit freundlichen Grüßen
-Franky- | |
Re: Länge eines mp4 Videos ermitteln | | | Autor: Spitzbube66 | Datum: 18.01.24 12:04 |
| Hallo Franky,
ich arbeite unter Windows 10 in meiner Firma und 11 auf dem Notebook zuhause. In den Eigenschaften der Videos werden die Länge (also Spieldauer), Bildbreite und -höhe, Datenrate und die Einzelbildrate korrekt angezeigt. Ich werde mich übers Wochende ausgibig mit Deinen Hinweisen beschäftigen, Du scheinst ja wirklich tief in der Materie drin zu stecken. Ich werde später berichten.
Besten Dank
Frank | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|