Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 07:58

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Video abspielen mal anders
BeitragVerfasst: Sa Mär 28, 2009 15:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Hi,

ich muss ein Video in Delphi abspielen. Da das aber immer negative Folgen nach sich zieht (jede Bibliothek hat ihre Macken) und ich alle Frames auch als JPG habe, dachte ich daran, die Frames nacheinander mit OpenGL anzuzeigen. Wäre das effizient ? Wie könnte man ein solches Programm vom Aufbau her realisieren ? Alle Frames in ein Texturenarray zu laden und dann zu zeichnen dauert ewig. Allerdings kann es ruckeln, wenn man in jedem Render-Aufruf den aktuellen Frame lädt.
Ich kann auf die Videobestandteile von Andorra wegen der GPL-Lizenz keinesfalls zurückgreifen. FFMpeg selbst kompilieren wäre eine andere Idee, aber dann mit OpenGL alles zu zeichnen ist auch nicht gerade einfach. Aber das nur mal ein paar andere Gehirngespinste, wie man ein Video auf den Bildschirm bringen könnte. Es wäre zwar schön, wenn Ihr auch andere Lösungsvorschläge außer OpenGLsche macht, aber wie man das in OpenGL umsetzt will ich trotzdem auf jeden Fall wissen.
Es geht um nichts außer einer Hintergrundanimation eines Spiels, das auf Canvas basiert. Es wäre wirklich schön, wenn man die CPU entlasten könnte. Das Render-Ereigniss auf OnIdle zuzuweisen wäre daher nicht gerade optimal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also je nach dem wie lang dein Video ist und bei welcher Auflösung du wie viele Frames du pro Sekunde da verwenden willst wäre das extrem ineffizient. OpenGL verwaltet Textur üblicherweise unkomprimiert im Speicher:
Nehmen wir mal an:
  • Auflösung 720×576 (DVD Qualität)
  • 24bit Farben
  • 25 Frames pro Sekunde
  • Laufzeit 5 Minuten bzw. 300 Sekunden

Macht insgesamt 30Mb pro Sekunde bzw. 8,7 Gb für die komplette Sequenz. Dazu kommt ggf. das Problem, dass du kein "power of two" Texturformat verwendest. Also das dürfte, auch wenn du ein komprimiertes Texturformat verwendest, jeden Grafikspeicher und auch die meisten Hauptspeicher sprengen, und das nur für die Hintergrundanimation!

Videos lassen sich sehr klein komprimieren, weil man sie üblicherweise als drei dimensionales Bild betrachtet und aufeinanderfolgende Bilder ja üblicherweise irgendeine Ähnlichkeit aufweisen. Für kleine Animationen könntest du ggf. eine komprimierte Volumentextur verwenden, aber da die Texturgröße begrenzt ist, geht das nur für kleine Sequenzen.

Ich kenne mich nicht unbedingt mit Videocodecs aus, aber ich kann mir nicht vorstellen, dass es da nichts gibt was unter LGPL steht. LGPL kannst du für alles verwenden, solange du es nur als Libary benutzt und diese nicht veränderst.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 16:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
In der Regel wird das ganze gestreamt. Das Grundprinzip mit OpenGL ist, die Texturen zu update, indem du einen Normalen Bildspeicher anlegst, wo deine Unkompremierten Texturdaten drin liegen. Wenn du nun ein neues differenz Bild(Frame) bekommst, dann werden nur die veränderten Pixel in den Speicher angepasst und in die Textur geupdated, ist das neue Frame ein Schlüssel Bild, dann wird der ganze Speicher ausgewechselt und in die Textur geupdated. AVI ist ja nur ein Container und hat ein PNG, JPEG support, also kannst den Videostream aus vielen einzel Bildern zusammensetzen.
Wenn du es dir sehr leicht machen willst, dann benutzt einfach die Theora Bibliothek von Xiph. Dies ist ein OpenSource Video Codec und dann brauchst du nur noch von der API das Frame geben lassen und die Textur Updaten. Es empfehlenswert ein Frameskip Funktion zu benutzen, damit auf langsameren System sowie Videos mit Audio auch Synchron bleiben.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 22:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Und was ist mit SDL+smpeg ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 29, 2009 00:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
http://de.wikipedia.org/wiki/SMPEG

Macht auch sein dienst aber da es mpeg1 basierend ist benötigt es mehr Platzt und hat eine schlechtere qualität als z.B. Theora.
SMPEG benötigt neben der dll noch meines wissens auch libmpeg(eine weitere dll/so).

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]