Video Library

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
AchimVL
Beiträge: 2
Registriert: 04.02.2017 15:48

Video Library

Beitrag von AchimVL »

PB-Version: Purebasic 5.60
OS: Win Vista SP 2 / 32-Bit

Compilereinstellungen:
[ ] Thread-sicheres Executable erstellen
[ ] OnError-Unterstützung einschalten
[x] Moderne Themen-Unterstützung aktivieren (für Windows XP und höher)
[ ] Administrator-Modus für Windows Vista und höher anfordern
[ ] User-Modus für Windows Vista und höher anfordern (keine Virtualisierung)

Ich weiss, dass keiner mehr 'VISTA-Mist_da' hat, aber dennoch ein interessantes Phänomen:

Dass die VideoLib einen 'gehörigen Knall' hat, ist ja schon allgemein bekannt. Die Anzahl der abgespielten Frames stimmt nie. Bei mir jedenfalls ist der Rückgabewert exorbitant gross und erst nach einer Division durch 10.000.000 und einem Korrekturalghoritmus zu gebrauchen. Jetzt habe ich an einer Datei des MP4-Formates jedoch nur die Dateiendung umbenannt, aus MP4 habe ich VIDEO gemacht, und schon stimmt der Rückgabewert der abgespielten Frames.

Jetzt kan man auf den Gedanken kommen, erst alle Dateien vor dem Abspielen einmal unter anderem Namen mit anderer Endung in den temporären Ordner zu kopiern und danach dann aufzurufen. :allright: :freak:

Einfach mit 'CopyFile()' geht das seltsamer Weise aber nicht.

Code: Alles auswählen

temporaryvideo$ = GetTemporaryDirectory() + "temp.video"
CopyFile("MyVideo.mp4", temporaryvideo$)
Nach einem CopyFile() muss die Datei wieder die Endung 'mp4' haben, ansonsten mag er sie nicht (Öffnen mittels LoadMovie() scheitert).

Nur über einen Umweg klappt es ...

Code: Alles auswählen

temporaryvideo$ = GetTemporaryDirectory() + "temp.video"
;// lade sie per 'IncludeBinary'
 DataSection
    Video1:
    IncludeBinary "MyVideo.mp4"
    VideoEnd:
  EndDataSection

;// schreibe den Speicherpuffer als 'temporaryvideo$' zurück auf die Festplatte (WriteData())
         CreateFile(70, temporaryvideo$)
          WriteData(70, ?Video1, ?VideoEND - ?Video1)
          CloseFile(70)

If LoadMovie(0, temporaryvideo$)
 PlayMovie(0, WindowID(0))
Endif
Nur das direkte Umbenennen (wie oben schon beschrieben) von 'MyVideo.mp4' in 'MyVideo.video' geht problemlos.
Übrigens tritt dieses Phänomen, dass die Anzahl der abgespielten Frames, die von MovieStatus() zurückgegeben werden, nach dem Umbenennen wieder stimmen, nicht mehr bei Win 7 SP 1 / 32-Bit auf. Für mich ist dies ein Hinweis auf ein Konvertierungsfehler der ausgelesenen Angaben, der wohl irgendwie Dateiendungsabhängig ist, bzw. dann die defekte Umrechnungsroutine benutzt wird. Auch dass davon VISTA/x32 betroffen ist und Win7/x32 nicht mehr, sollte ein Hinweis auf die Fehlerquelle sein.

Kann man die VideoLib nicht mal nach all den Jahren überarbeiten? Die Erweiterung um Fähigkeiten wie 'Streams' zu öffnen wäre auch recht interessant.