Einzelnen Beitrag anzeigen

Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: DirectShow IMediaSeeking MP3

  Alt 10. Dez 2010, 15:40
Hy,
kontrollierst du vor dem auslesen der Länge mit dem Befehl:

Delphi-Quellcode:
HRESULT GetCapabilities(
  [out] DWORD *pCapabilities
);
ob das überhaupt möglich ist?

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:
var
  dwCaps: DWORD;
  MediaSeeking.GetCapabilities(dwCaps);

  if (dwCaps and AM_SEEKING_CanGetDuration) then
    begin;
      //The stream can report its duration.
    end;
Und wenn das dort schon Fehl schlägt...
...Mhhh dann müsste ich mir auch erstmal was einfallen lassen oO

Edit:

...Eine vergleichbare Technik müsste es bei DirectShow doch auch geben, oder nicht?
Also mir ist im Moment keine "vergleichbare Technik" bekannt! Damüsste ich auch erstmal Nachforschen...

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:
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;
Gibt dir die Länge der MP3 in Sekunden an!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)

Geändert von lbccaleb (10. Dez 2010 um 17:20 Uhr)
  Mit Zitat antworten Zitat