AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectShow IMediaSeeking MP3
Thema durchsuchen
Ansicht
Themen-Optionen

DirectShow IMediaSeeking MP3

Ein Thema von Linor · begonnen am 9. Dez 2010 · letzter Beitrag vom 15. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Linor
Linor

Registriert seit: 19. Mai 2008
Ort: Holzwickede
60 Beiträge
 
Delphi 2010 Professional
 
#1

DirectShow IMediaSeeking MP3

  Alt 9. Dez 2010, 15:35
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...
Gruß, Kai
Imabas - see you on http://www.pixandmore.de
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

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

AW: DirectShow IMediaSeeking MP3

  Alt 9. Dez 2010, 16:33
Was genau ist da dein Problem, und wie rufst du MediaSeeking auf?

Bei mir funktioniert das, auch bei MP3´s!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Linor
Linor

Registriert seit: 19. Mai 2008
Ort: Holzwickede
60 Beiträge
 
Delphi 2010 Professional
 
#3

AW: DirectShow IMediaSeeking MP3

  Alt 9. Dez 2010, 17:06
Hallo,
Was genau ist da dein Problem, und wie rufst du MediaSeeking auf?
wie ich das oben schon schrieb, es geht auch nicht das ich keinen Wert erhalte, sondern falsche Werte. Google mal danach, trifft man häufig an, aber keine Lösung...

Bei mir funktioniert das, auch bei MP3´s!
Du meinst deinen kleinen Player? Sorry, aber der tickt auch nicht richtig...

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 ) (MediaMonkey ist dann ungefähr bei 75%)
Gruß, Kai
Imabas - see you on http://www.pixandmore.de
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

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

AW: DirectShow IMediaSeeking MP3

  Alt 9. Dez 2010, 18:23
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 ! Es währe net, wenn du eine Datei anhängen könntest, welche Probleme macht!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Linor
Linor

Registriert seit: 19. Mai 2008
Ort: Holzwickede
60 Beiträge
 
Delphi 2010 Professional
 
#5

AW: DirectShow IMediaSeeking MP3

  Alt 10. Dez 2010, 06:29
Hallo,
ich nutze das DSPack und der ruft ja IMediaSeeking.GetDuration auf.

Zitat:
Es wäre nett, wenn du eine Datei anhängen könntest, welche Probleme macht!
Zahlst du die GEMA Gebühren?

Bei Google suchenIMediaSeeking GetDuration mp3
Gruß, Kai
Imabas - see you on http://www.pixandmore.de
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#6

AW: DirectShow IMediaSeeking MP3

  Alt 10. Dez 2010, 12:04
GEMA-freie Musik existiert
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: DirectShow IMediaSeeking MP3

  Alt 10. Dez 2010, 12:13
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?
The angels have the phone box.
  Mit Zitat antworten Zitat
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, 14: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 16:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Linor
Linor

Registriert seit: 19. Mai 2008
Ort: Holzwickede
60 Beiträge
 
Delphi 2010 Professional
 
#9

AW: DirectShow IMediaSeeking MP3

  Alt 10. Dez 2010, 16:51
Hallo lbccaleb,
Zitat:
Also zur not gibt es noch eine andere Möglichkeit, an die Länge der MP3 zu kommen,
also irgendwie reden wir aneinander vorbei, es geht nicht darum an einen Wert zu kommen, es geht darum an einen korrekten Wert zu kommen. Wie ich oben schon schrieb und auch Gausi bemerkte, ist das die VBR in den MP3's... CBR geht leicht: Anzahl Frames * Framelänge und gut ist, VBR aber nicht...

Mein anliegen geht dahin nicht WIE kriege ich eine Länge, sondern wie die KORREKTE Länge

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: http://www.free-codecs.com/download/...how_Filter.htm
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 Und als Schmankerl: Die kommen mit VBR auch dann zurecht
Gruß, Kai
Imabas - see you on http://www.pixandmore.de
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

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

AW: DirectShow IMediaSeeking MP3

  Alt 14. Dez 2010, 16:10
also irgendwie reden wir aneinander vorbei, es geht nicht darum an einen Wert zu kommen, es geht darum an einen korrekten Wert zu kommen
Nee, reden wir nicht! Ich hab das schon verstanden
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
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz