![]() |
DirectShow IMediaSeeking MP3
Hallo Zusammen,
weiss jemand wie man DirectShow dazu bringt per IMediaSeeking.GetDuration korrekte Werte bei MP3's zurückzuliefern? Bass & Co kriegen das alle hin, nur DS nicht? FFDSHOW habe ich schon probiert, andere Codecs helfen da auch nicht? Wegen Lizenzen (Kommerz) wollte ich eigentlich nicht auf Bass & Co umsteigen, da MP3 ja in Windows lizenziert ist... |
AW: DirectShow IMediaSeeking MP3
Was genau ist da dein Problem, und wie rufst du MediaSeeking auf?
Bei mir funktioniert das, auch bei MP3´s! |
AW: DirectShow IMediaSeeking MP3
Hallo,
Zitat:
Zitat:
Nimm mal ein FLAC, konvertiere das runter auf ein 96KB MP3VBR (Lame) und lass die mal parallel in deinem Player und MediaMonkey spielen, deine Trackbar ist schon am Ende bevor der Song aufhört. (Grade getestet :stupid:) (MediaMonkey ist dann ungefähr bei 75%) |
AW: DirectShow IMediaSeeking MP3
Besteht das Problem auch noch, wenn du die MP3 in einem der beigefügten Bsp. vom DSPack abspielst?
Und nein, ich möchte hier nicht groß rum konvertieren :stupid:! Es währe net, wenn du eine Datei anhängen könntest, welche Probleme macht! |
AW: DirectShow IMediaSeeking MP3
Hallo,
ich nutze das DSPack und der ruft ja IMediaSeeking.GetDuration auf. Zitat:
![]() |
AW: DirectShow IMediaSeeking MP3
GEMA-freie Musik existiert ;)
|
AW: DirectShow IMediaSeeking MP3
Ich schätze, dass das an der variablen Bitrate liegt. Bei der Bass.dll gibt es da auch Probleme, wenn man beim Starten nicht das Flag BASS_PRESCAN (oder ähnlich) benutzt, was vor Beginn der Wiedergabe die komplette Datei liest und die Bitrate (bzw. Größe in Bytes) der einzelnen Frames scannt. Eine vergleichbare Technik müsste es bei DirectShow doch auch geben, oder nicht?
|
AW: DirectShow IMediaSeeking MP3
Hy,
kontrollierst du vor dem auslesen der Länge mit dem Befehl:
Delphi-Quellcode:
ob das überhaupt möglich ist?
HRESULT GetCapabilities(
[out] DWORD *pCapabilities ); Möglich währen da folgende Werte:
Delphi-Quellcode:
AM_SEEKING_CanGetCurrentPos
The stream can report its current position. See Remarks. AM_SEEKING_CanGetStopPos The stream can report its stop position. AM_SEEKING_CanGetDuration The stream can report its duration.
Delphi-Quellcode:
Und wenn das dort schon Fehl schlägt...
var
dwCaps: DWORD; MediaSeeking.GetCapabilities(dwCaps); if (dwCaps and AM_SEEKING_CanGetDuration) then begin; //The stream can report its duration. end; ...Mhhh dann müsste ich mir auch erstmal was einfallen lassen oO Edit: Zitat:
Edit2: Also zur not gibt es noch eine andere Möglichkeit, an die Länge der MP3 zu kommen, mit dem Umweg über das Interface "IMediaDet" (MediaDetails)
Delphi-Quellcode:
Gibt dir die Länge der MP3 in Sekunden an!
function GetMultimediaFileDuration(const Filename: AnsiString): Double;
var MediaDet: IMediaDet; begin Result := 0; if CoCreateInstance(CLSID_MediaDet, nil, CLSCTX_INPROC_SERVER, IID_IMediaDet, MediaDet) = S_OK then if MediaDet.put_Filename(Filename) = S_OK then if MediaDet.put_CurrentStream(0) = S_OK then if MediaDet.get_StreamLength(Result) <> S_OK then Result := 0; MediaDet := nil; end; |
AW: DirectShow IMediaSeeking MP3
Hallo lbccaleb,
Zitat:
Mein anliegen geht dahin nicht WIE kriege ich eine Länge, sondern wie die KORREKTE Länge :P Wenn man sich Bass oder zlibplay anschaut liegen die bis auf 1-2 Sekunden, ohne Scan, ziemlich nahe an dem was Gausi's TMPEG-Info liefert, DirectShow liegt da, je nach VBR, voll daneben. Kommt wohl, wie ich gelesen habe, auf den ersten Frame an, der wird einfach Multipliziert.... Ein Lösung ist dieser Filter: ![]() Nur was nützt es mir wenn ich eine TrackBar auf den korrekten Wert einstellen kann, diese auch sauber bis zum Ende läuft, aber Seek-Befehle im hinteren Teil gehen nicht da der DS-Player ja nicht weiss wie lang er ist und zu hohe Werte einfach ignoriert, bzw. gar nicht in der Lage wäre per VBR diese Werte sauber anzuspringen. Eine positive Neuerung gibt es für mich heute: bass.dll hat ja bekanntermaßenen eine MP3-Free Version. Das 2.4er Release vom 30.11.2010 kann aber trotzdem MP3's per DS abspielen, ohne das man merkt das er das tut :thumb: Und als Schmankerl: Die kommen mit VBR auch dann zurecht :stupid: |
AW: DirectShow IMediaSeeking MP3
Zitat:
Das Problem ist, ich selber habe keine solche MP3 die Probleme macht, kann es selber also auch nicht testen! Und die Funktion die ich gepostet hab, holt sich die länge der MP3 anders als IMediaSeeking! Deswegen hatte ich gedacht/für dich gehofft dass diese Funktion dir die richtige Länge verrät! Wenn dass der Fall ist, kannst du die Trackbar auf diese Länge setzen, und mit IMediaSeeking dann die Position bestimmen. Da das ja ohne Probleme läuft. Sicher nicht die sauberste Lösung, aber wenn es ohne Probleme läuft, ist doch alles gut ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz