MP3s wiedergeben

Anfängerfragen zum Programmieren mit PureBasic.
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

Hroudtwolf hat geschrieben:Warum sollte man sich mit Funktionen rumschalgen die keine guten Wrte zurückgeben. MCI tut das!.
Veraltet, deprecated.

Darüberhinaus weiß ich nicht, wovon Du sprichst. Muss ich auch nicht.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@Traumatic
Für die Movie-Funktionen spricht im Übrigen, dass Sie im Gegensatz zu MCI den gegenwärtigen "Standard" repräsentieren. MCI ist veraltet...
Auf Movie-Funktionen in PB, die den gegenwärtigen Stand repräsentieren, warte ich seit Monaten. Man kann damit nämlich keines der "modernen" Videoformate (u.a. MPEG2, MP4, DivX) richtig abspielen. Die Rückgabewerte für die Position und für FPS sind dermaßen daneben, dass damit allenfalls ein einfaches durchgängiges Abspielen, keinesfalls aber ein gezieltes Anspielen und saubere Anzeigen hinbekommt.
Oder habe ich da etwas verpasst?
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

Hmm... das LoadMovie()/PlayMovie() DirectShow wrapped, sollte das eigentlich
alles funktionieren. DirectShow bedient sich hierbei der installierten (DirectShow-
Kompatiblen) CoDecs. Hab's gerade kurz ausprobiert: XVID, DivX und
ein DV-CoDec funktionieren hier.

Kann natürlich sein, dass mit den Movie-Funktionen irgendetwas nicht hinhaut
- das weiß ich nicht. Prinizipiell (da DirectShow) sollte es jedoch keine Probleme
geben.

Hast Du mal ausprobiert, DirectShow direkt zu benutzen?
Funktionieren Deine Video-Formate dann?

http://forums.purebasic.com/german/viewtopic.php?t=1054 (Video)
http://forums.purebasic.com/english/vie ... hp?t=14673 (nur Audio)


Ich will aber keinen Glaubenskrieg führen: Benutzt, was Ihr für richtig haltet.
MCI ist halt ein Überbleibsel aus Windows 3.1 Tagen, weshalb ich es nicht
empfehlen würde, aber das bin nur ich.


EDIT: Ach... ich sehe gerade, abspielen geht bei Dir ja auch...
Dann vergiss das Posting einfach. ;)
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@traumatic

Code: Alles auswählen

; Examine Movies jear 2004-11-13

MovieName.s

If InitMovie() = #False
  MessageRequester("Error", "Can't initialize movie playback !", 0) 
  End
EndIf

Repeat
  MovieName = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)
  If MovieName = "" : Break : EndIf
  If LoadMovie(1, MovieName)
    Debug ">>> " + MovieName + " <<<"
    Debug "MovieLength: " + Str(MovieLength()) + " Frames"
    Debug "MovieInfo(0): " + Str(MovieInfo(0)/1000) + " FPS"
    Debug "MovieWidth: " + Str(MovieWidth())
    Debug "MovieHeight: " + Str(MovieHeight())
    Debug "--------------------------------------------------"
    FreeMovie(1) 
  EndIf
ForEver
End
Mit diesem Kode kann man sich alle möglichen Videodateien anschauen und feststellen, was die Movie-Funktionen zurückmelden.
Den Kode habe ich schon vor Monaten hier gepostet und Fred hat ihn nach meiner Kenntnis auch erhalten.
Mein PC hat alles, was man zur Videobearbeitung braucht und seine Konfiguration ist ok.
Probier den Kode doch mal bitte mit neueren Formaten aus.
Für den direkten Weg zu DirectShow fehlt mir der Einstieg und die Zeit, mich intensiv damit zu beschäftigen.
Hättest Du Beispiele verfügbar, mittels derer man mit DirectShow ein Video abspielen kann?
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

jear hat geschrieben:Probier den Kode doch mal bitte mit neueren Formaten aus.
Später gerne.
Hättest Du Beispiele verfügbar, mittels derer man mit DirectShow ein Video abspielen kann?
Siehe erster Link aus meinem vorherigen Posting.
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

traumatic hat geschrieben:
jear hat geschrieben:Probier den Kode doch mal bitte mit neueren Formaten aus.
Später gerne.
So. Gerade eben ein HD DivX ausprobiert. Alle Werte stimmen, einschließlich
Frame-Anzahl (hätte ich nicht unbedingt erwartet).
Anschließend habe ich's mir auch noch mal anzeigen lassen, kein Problem.

Was mache ich falsch?
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@traumatic
Die Frage müsste ja lauten, was mache ich falsch.
Versuche es doch mal bitte mit irgendeiner MPEG2- (MPG, VOB) oder MP4-Datei.
AVI-Formate, also auch DivX-AVI und MPEG1 werden ja richtig angezeigt.
Bei MPEG2 werden für Frameanzahl und FPS aber offenbar falsche Werte ermittelt und auch die Positionierung mit MovieSeek() klappt nicht.

>>> I:\PS93_6000VBR.mp4 <<<
MovieLength: 500000000 Frames
MovieInfo(0): 35675 FPS
MovieWidth: 704
MovieHeight: 576
--------------------------------------------------
>>> I:\PS93_6000VBR.mpg <<<
MovieLength: 499725907 Frames
MovieInfo(0): 30810 FPS
MovieWidth: 720
MovieHeight: 576
--------------------------------------------------
>>> I:\Mischung.mpg <<<
MovieLength: 663899313 Frames
MovieInfo(0): -27585 FPS
MovieWidth: 720
MovieHeight: 576
--------------------------------------------------
>>> I:\Fr-Video.mpg <<<
MovieLength: 49541808 Frames
MovieInfo(0): -499449 FPS
MovieWidth: 720
MovieHeight: 576
--------------------------------------------------
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Bei MPEG2 werden für Frameanzahl und FPS aber offenbar falsche Werte ermittelt und auch die Positionierung mit MovieSeek() klappt nicht.
Sag ich doch ! Und das geht quer durch die Formate so.
Absolut unbrauchbar für einen Mediaplayer oder Ähnliches.
Verwies ich auch auf MCI. Da ist es sch*** egal ob es veraltet ist oder nicht.
Es tut seinen Zweck für kleinere Dinge.
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

jear hat geschrieben:Versuche es doch mal bitte mit irgendeiner MPEG2- (MPG, VOB) oder MP4-Datei.
Ich hab's jetzt noch nicht ausprobiert, aber diese Dateien sind doch alle
VBR-Codiert, oder? Da gibt's auch via DirectShow Probleme.

Beispielsweise können nur I-Frames angesprungen werden, B- und
P-Frames jedoch nicht. Leider alles nur "rough estimation".

Man müsste IIRC direkt den MPEG2-Splitter ansprechen, das führt aber
für eine universelle Library vielleicht ein wenig zu weit.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@traumatic
Es gibt mit den Dateien allesamt keine Probleme mit anderen Programmen. seien es Player, Schnittprogramme oder Analyseprogramme. Nur die Movie-Funktionen von PB haben damit Probleme, weil sie offenbar älteren Datums sind und die Antworten von DX nicht richtig interpretieren.
Die Sache mit VBR und CBR hat damit überhaupt nichts zu tun. Alle MPEG-Videos sind sozusagen "VBR", da "CBR" lediglich ein Sonderfall von "VBR" ist, bei dem sich der Encoder bemüht, einen möglichst, aber nie tatsächlich gleichmäßigen Bitstrom zu erzeugen.
Bezüglich des Anspringens von Frames gibt es ebenfalls keinen Unterschied zwischen VBR und CBR. Gerade in dieser Beziehung (GOP-Strukturen) ist der innere Aufbau von MPEG1 und MPEG2 wenig unterschiedlich.
Allerdings ist die Struktur der Header und die Ablage der Daten darin, wiederum sehr unterschiedlich. Ich vermute, dass PB die bei MPEG2-Formaten wichtige Abstimmung des Timeformats nicht oder falsch durchführt.
Hier noch ein paar Beispiele :
--------------------------------------------------
>>> D:\Eigene Musik\MP3's\Diverse\ANASTACIA___NOT_THAT_KIND.MP3 <<<
MovieLength: 2021435000 Frames
MovieInfo(0): -7398 FPS
MovieWidth: -1
MovieHeight: -1
--------------------------------------------------
>>> D:\Eigene Musik\MP3's\Diverse\MADONNA__THE_POWER_OF_GOOD.MP3 <<<
MovieLength: -1777796046 Frames
MovieInfo(0): 1276 FPS
MovieWidth: -1
MovieHeight: -1
--------------------------------------------------
>>> I:\PS9_DVDkCBR.mpg <<<
MovieLength: 583697475 Frames
MovieInfo(0): -7208 FPS
MovieWidth: 720
MovieHeight: 576
--------------------------------------------------
>>> V:\Videomaterial\Photoshoot9\MPEGS\PS9_6000CBR.mpg <<<
MovieLength: 584000869 Frames
MovieInfo(0): -1977 FPS
MovieWidth: 720
MovieHeight: 576
--------------------------------------------------
>>> V:\Videomaterial\Photoshoot9\MPEGS\PS9_SVCDk.mpg <<<
MovieLength: 585266781 Frames
MovieInfo(0): 19848 FPS
MovieWidth: 480
MovieHeight: 576
--------------------------------------------------
>>> V:\Videomaterial\Photoshoot9\MPEGS\PS9_VCDk.mpg <<<
MovieLength: 1460 Frames
MovieInfo(0): 25 FPS
MovieWidth: 352
MovieHeight: 288
--------------------------------------------------

Wie man sieht, ist lediglich die als letzte aufgeführte MPEG1-Datei (VCD) richtig interpretiert.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Antworten