Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Videos vorladen (https://www.delphipraxis.net/127434-videos-vorladen.html)

HighSpeed 13. Jan 2009 10:11


Videos vorladen
 
Moin,
ich hab jetzt schon n Weilchen gesucht, aber bisher noch nichts brauchbares gefunden, dass mir weiterhelfen könnte...

folgendes Prob:
Ich hab einige Videos (zusammen ca 300MB) in einer RESsource-Datei gespeichert und will diese nun zu bestimmten Zeitpunkten während des Programmablaufs abspielen.
Das ganze funzt an sich auch genau so wie es soll (mit TAnimate) aber die Videos (selbst erstellte Animationen) stocken beim ersten abspielen extrem ... DiaShow-like.
Ab dem 2. Abspielen laufen die Videos dann flüssig.

meine Frage:
Gibt es eine Möglichkeit Videos beim Programmstart in den RAM zu laden?
(Ich dachte mir das so in der Form einer ProcessBar oder so ähnlich.)

Hoffe jemand hat eine Idee

mkinzler 13. Jan 2009 10:13

Re: Video vorladen
 
Du könntest sie in einen MemoryStream laden, von dem du sie dann anzeigst.

HighSpeed 13. Jan 2009 10:19

Re: Videos vorladen
 
Kannst mir kurz schreiben wie das funzt?
Hab bisher noch nicht mit MemoryStream gearbeitet ...

Klaus01 13. Jan 2009 10:21

Re: Videos vorladen
 
.. da habe ich mal eine Verständnisfrage:

Liegen die Videodaten denn nicht schon im RAM wenn sie als Resource eingebunden wurden?

Grüße
Klaus

mkinzler 13. Jan 2009 10:22

Re: Videos vorladen
 
Du streamst ja jetzt direkt aus der Ressource. Du musst nun halt den umweg über den Memorystream nehmen

HighSpeed 13. Jan 2009 10:25

Re: Videos vorladen
 
Ich denke nicht, dass alles direkt schon im RAM liegt, was als ressource verwendet wird...
da würde doch anfangs etwas länger geladen werden oder? (bei 300 MB)

Na gut, also MemoryStream, kann mir dass jemand kurz an nem Beispiel zeigen?

mkinzler 13. Jan 2009 10:30

Re: Videos vorladen
 
Delphi-Quellcode:
var
  ms: TMemoryStream;
   ...
  ms := TMemoryStream.Create;
  ms.LoadFromStream( ressource);
...

HighSpeed 13. Jan 2009 10:37

Re: Videos vorladen
 
Gut,
dann werd ich das mal mit nem MemoryStream versuchen...

Aber wie greife ich dann auf den Stream zu?
aus der ressource konnte man die Videos per
Delphi-Quellcode:
Animate1.ResName := 'video1'
laden (darauf zugreifen)

Wie bekomme ich ein Video dann aus dem MemoryStream?

mkinzler 13. Jan 2009 10:45

Re: Videos vorladen
 
Mit TAnimate, wird es wohl so nicht gehen

HighSpeed 13. Jan 2009 10:55

Re: Videos vorladen
 
ok, das ist ja an sich kein problem.
womit dann...dem mediaplayer?

turboPASCAL 13. Jan 2009 11:02

Re: Videos vorladen
 
Der Mediaplayer (in Delphi) unterstützt kein Abspielen von Resourcendaten.
Ich frag mich sowieso warum man ein Video was eine Grösse von mereren 100 MB hat in eine Res. packt. :gruebel:

HighSpeed 13. Jan 2009 11:07

Re: Videos vorladen
 
Es sind genau genommen 7 Videos (zusammen ca. 300 MB)

Um diese nicht immer extra mit der EXE-Datei mitliefern zu müssen hab ich sie in einer REs Datei zusammengefügt und sie so in die EXE mit integriert.
(das war so der Hauptgedanke)
Hat ja auch funktioniert, nur dass das erste Abspielen so stark stockt muss man doch verhindern können...

himitsu 13. Jan 2009 11:25

Re: Videos vorladen
 
Hast du mal versucht die resource vorher einfach mal so einzulesen?

wie ließt du denn jetzt ein, bzw. wie spielst du es ab.

HighSpeed 13. Jan 2009 11:29

Re: Videos vorladen
 
Bisher funktioniert das so:

Delphi-Quellcode:
...
implementation
{$R clips.RES}
...
Animate1.ResName := 'clip1';
Animate1.Play(1,0,1);
...

HighSpeed 14. Jan 2009 08:45

Re: Videos vorladen
 
Hat denn wirklich keiner ne Idee?

...@himitsu
wei meinst du des, einfach mal so einlesen?

himitsu 14. Jan 2009 09:00

Re: Videos vorladen
 
nja, derzeit werden die Daten ja von dem "Player" stück für Stück in den RAM geladen und abgespielt.

und da es beim 2zweiten Abspielen dann schneller geht, ist danach anscheinend irgenwo etwas in 'ner Cache (oder so) gelandet.

Wenn du dir jetzt selber 'nen bissl Speicher reservierst und es auch stück für Stück vorher mal in diesen Speicher kopierst (ich denk mal du möchtest den Film nicht gleich komplett in den RAM laden), landet es ja vieleicht auch in dieser Cache und beim ersten Abspielen isses dann schon da drin und kann gleich "schnell" abgespielt werden.
(so als Überlegung)

HighSpeed 14. Jan 2009 09:03

Re: Videos vorladen
 
Meinst du das jetzt so in der Richtung von im Hintergrund schonmal abspielen ?

himitsu 14. Jan 2009 09:08

Re: Videos vorladen
 
Zitat:

Zitat von HighSpeed
Meinst du das jetzt so in der Richtung von im Hintergrund schonmal abspielen ?

nja, entweder dieses, oder halt selbst eine Routine schreiben, welches die daten mal kurz in den RAM lädt.

HighSpeed 9. Feb 2009 02:27

Re: Videos vorladen
 
Ok, ich wollte nur kurz bescheid geben, dass es so funktioniert.

Ich hab eine extra form gestaltet, die beim Programmstart vor der Hauptform angezeigt wird, auf der ein Ladebalken angezeigt wird.
Die Videos werden einfach nacheinander abgspielt, aber von dem TAnimate muss mindestens 1 Pixel zu sehen sein, sonst funktioniert das nicht.

Danach wird diese form geschlossen und die Hauptform geöffnet und die Videos stocken nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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