Autor Beitrag
Terra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Do 09.11.06 12:11 
Hallo zusammen,

jetzt habe ich es endlich hinbekommen eine Desktop-Capture Funktion zu programmieren. Soweit so gut, wenn ich eine Vorschau mache habe ich eine Framerate von ca. 24 Bilder pro Sekunde. Ohne Vorschau sind es an die 64 Bilder pro Sekunde.

Jetzt möchte ich das ganze auch so abspeichern, das das System nicht davon belastet wird. Frage mich aber nur, wie ich das anstellen soll. Problem an der ganzen Sache ist halt, das der Stream evtl. auch in Echtzeit komprimiert werden soll. Mit DivX oder so.

Da bei der Aufnahme ja keine Vorschau verwendet wird habe ich also 64 Bilder pro Sekunde zur verfügung. Davon ziehe ich jetzt mal spontan die hälfte ab um in Echtzeit zu komprimieren.

Wie buffer ich die speicherung, so das ich nicht unter 24 bilder pro Sekunde falle und eine perfekte Aufnahme hinbekomme? einfach den Stream speichern ist nicht drinn, da die Framerate so in den Keller wandert das die aufnahme nur noch mit höchstens 5 bilder pro Sekunde stattfindet und das für mich ungenügend ist.

Könnt mir da jemand helfen. Wäre für schnelle Routinen sehr Dankbar.

Terra
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 09.11.06 17:03 
*auch meld*

Genau das Problem kenne ich. Leider hab ich auch keine Lösung für gefunden :(

Man könnte in einem Thread die Bilder capturen und in einem array oder so ablegen. Ein anderer Thread kümmert sich dann ums komprimieren.
Hab ich aber nicht hingekriegt, vielleicht gelingt es dir ja.

Grüße,
Martok

PS: mich würde mal das Programm interessieren, wenns fertig ist ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 09.11.06 17:32 
Moin!

Ich habe keine Lösung, die ich aus dem Hut zaubern könnte, aber ich Überlege mal "laut": ;)

Bei 25Hz Framerate hast du ein Zeitfenster von 40ms, in dem du rund 3MB Daten (=1024x768x32Bit) capturen, komprimieren und auf den Weg Richtung Storage bringen mußt... :shock: ;) Das ist ziemlich viel in ziemlich wenig Zeit...

Schau dir mal VNC an. Wenn du von einer Transferrate von ca. 5MB/s im 100mbit-Netz ausgehst, was man realistischerweise auch als Plattentransferrate ansetzen sollte, dann ist das so ziemlich max. dessen, was man da erreichen kann, was dir VNC vorführt. Und deren Ansatz ist ja jetzt nicht gerade "ineffizient" zu nennen, weil auf Streaming von Desktopvideo ausgelegt. :D

"Auf Vorrat" in den Speicher schaufeln, weil Direktverarbeitung zu langsam ist, wird auch nix bringen, weil irgendwann (und zwar ziemlich schnell) ist der nämlich auch voll, es bleibt also eigentlich nur realtime. ;)

Meine "Prognose": Verabschiede dich schon mal innerlich von den 25Hz Framerate... :|

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 09.11.06 17:39 
Irgendwie muss es aber gehen, siehe FRAPS.
(auch wenn das bei mir immer abstürzt)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
perry5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Fr 10.11.06 00:00 
Wieso hast du ohne Vorschau nur 64 Frames? Nur dadurch, das du den aktuellen Desktop in den Hauptspeicher kopierst, brauchst du 1/64 sek? Naja, sind vielleicht 3 mb an Daten, aber das ist ja noch Hauptspeicher und net Festplatte, alleine daran sollte man noch optimieren können.
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 10.11.06 10:32 
Zitat:
Wieso hast du ohne Vorschau nur 64 Frames?

Also mal dazugesagt, das ist erst meine 2. Anfänger Funktion die ich in dieser Richtung geschrieben habe. Hab mich sehr an vorhandenen Material gehalten und wüsste keine alternative zum Capturen des Bildschirms. Gibt es eine Assembler Methode mit der man den Screen schneller "ablichten" könnte ? Nicht hauen, nur ne Frage.

Aber um die Frage warum ich nur 64 Frames ohne Vorschau habe zu beantworten kann ich dazu sagen, das es an meiner Grafikkarte und Rechner liegt (vielleicht mehr am Rechner als an der Graka). Ist halt ein älteres System (AMD 2600+, Geforce 6700 GT)

Ich habe bei mir im Downloadbereich mal das Programm, so wie es jetzt captured reingestellt. Zu finden hier: www.sro-toolbox.de/i...temid=43&lang=de

Da könnt ihr auch mal selber sehen was ihr für Frameraten mit und ohne Vorschau habt.

Aber ich schweife jetzt von eigentlichen Thema ab.
Da die Größe (x, y) des Bildes das gecaptured wird nicht unbeding in der AVI genau so groß sein soll wie die Desktopauflösung frage ich mich schon die ganze Zeit ob es was bringen würde, wenn man nach dem capturen das Bild sofort verkleinert und daduch doch eigentlich eine Menge MB einspaart. Ist aber wieder die Frage, wie lange dauert das verkleinern und wie wirkt sich das auf das capturen selber aus. Mittels StretchBlt halt. Eine Größe von 640x480 sollten wohl ausreichen.

Kann man die Bilder nicht wie Texturen in den Zwischenspeicher der Grafikkarte ähm zwischenspeichern und diese dann nach und nach wieder rausholen? Damit könnte man doch eine ganze Menge Zeit einspaaren und das system sollte damit doch genug Zeit haben den Stream zu speichern ohne das system allzusehr zu belasten.

Wer mehr weiß bitte melden !

Terra
perry5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Fr 10.11.06 15:34 
Zumindest bei DirectX ist auf der Grafikkarte imemr der aktuelle Bildshcirm gespeichert. Würde mich sehr wundern, wenn das biem normalen Desktop anders wäre. Man bräuchte halt nur ne Funktion das von der Grafikkarte zu bekommen. Aber wahrshceinlich müsste das sehr lowLevel sein, und wäre dann evlt. noch für alle Grafikkarten unterscheidlich aber theoretisch gehts.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 10.11.06 16:52 
user profile iconTerra hat folgendes geschrieben:

Ich habe bei mir im Downloadbereich mal das Programm, so wie es jetzt captured reingestellt. Zu finden hier: www.sro-toolbox.de/i...temid=43&lang=de

Das mag jetzt zwar doof klingen, wie lädt man bei dir was runter? Leider kein Link auf der Seite gefunden, nur zum Forum...
user profile iconTerra hat folgendes geschrieben:

Da die Größe (x, y) des Bildes das gecaptured wird nicht unbeding in der AVI genau so groß sein soll wie die Desktopauflösung frage ich mich schon die ganze Zeit ob es was bringen würde, wenn man nach dem capturen das Bild sofort verkleinert und daduch doch eigentlich eine Menge MB einspaart. Ist aber wieder die Frage, wie lange dauert das verkleinern und wie wirkt sich das auf das capturen selber aus. Mittels StretchBlt halt. Eine Größe von 640x480 sollten wohl ausreichen.

Auch das hatte ich versucht ;)
Mit einer aufs halbieren hochoptimierten Funktion immer noch zu langsam, StretchBlt ist nochmal viel langsamer.
Die Daten werden zwar weniger, aber selbst 0.1s pro Frame fürs Verkleinern sind zu langsam.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.11.06 21:24 
sag mal terra, wieso willst du 64 bilder je sekunde auf deine festplatte bannen, wenn das menschliche auge bie unter 24 bilder je sekunde das ganze als verwacklungsfreien film sieht? ..... wenn schon denk ich, kannst du dann mit der auflösung (pixel) und / oder der farbauflösung, sehr zurückschrauben...

versuch es doch mal in dieser richtung <HTH>
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 10.11.06 22:17 
user profile iconMartok hat folgendes geschrieben:
user profile iconTerra hat folgendes geschrieben:

Ich habe bei mir im Downloadbereich mal das Programm, so wie es jetzt captured reingestellt. Zu finden hier: www.sro-toolbox.de/i...temid=43&lang=de

Das mag jetzt zwar doof klingen, wie lädt man bei dir was runter? Leider kein Link auf der Seite gefunden, nur zum Forum...

Genau das selbe habe ich mich auch gefragt.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.11.06 16:35 
3589 registriert.


Naja, willst Du jetzt die Registrationen auf 10000 pushen - oder was!?


Zuletzt bearbeitet von hathor am So 12.11.06 17:17, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 11.11.06 23:39 
Hallo!

@Terra: Bitte finde eine andere Download-Möglichkeit. Wieso hängst Du das Programm nicht einfach hier im Forum an Deinen Beitrag an?

@all: Bitte keine weitere Diskussion um Terras Link. Das ist nicht Thema dieses Threads!

@Hathor: Das ist nicht der Tonfall, den wir hier im Forum haben wollen! :mahn:

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 12.11.06 14:55 
Die Google-Suche ergibt 13.400 Fundstellen für "Desktop-Capture Funktion".
Warum sollte also jemand kurz vor Einführung von HD-DVD und BLURAY ein Programm erstellen, das geeignet ist, kopiergeschütztes Material, das den Weg zum Bildschirm gefunden hat, digital neu abzuspeichern?
Dass man den Ton parallel dazu auch abspeichert, setze ich mal voraus - aber dafür gibt es ja auch
schon genug Möglichkeiten...
Ich bin nicht bereit, mich irgendwo zu registrieren (der DL setzt das voraus), wenn ich damit rechnen muss, dass der Staatsanwalt ihm (Terra) bald die Türe einrennt.

Natürlich wüsste ich auch gerne, ob ich eigentlich die Hardware hätte, die die "Desktop-Capture
Funktion to AVI" nutzen kann...

Übrigens: MS wird HD-DVD unterstützen, aber BLURAY wird wahrscheinlich für die Wiedergabe kopiergeschützten Materials nicht im PC funktionieren (Grund: siehe oben!!!).
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 12.11.06 16:24 
Aha. Sehr nett. Grüße auch an die armen Leute, die Trainingsvideos erstellen müssen. Auch schöne Grüße an Gamer, die ihre Aktionen aufnehmen wollen.

Achso, nochwas: ich nehm das jetzt mal persönlich, aus obengenannten Gründen.

Keine Grüße,
Martok

PS: sag das mal den Fraps, Camstudio, Camtasia usw. Entwicklern, dass die ihre Produkte nur zum Video abfilmen machen.
Mal davon abgesehen, das sich das jeder technischen Grundlage entzieht. Viedeo-Overlays kann man nicht abfilmen!!! Besonders die nicht, die für die Schutzkette von Bluray und HDDVD benutzt werden, da die selbs im Graka-Speicher verschlüsselt liegen.

PPS@Admins: haben wir sowas wie ein Killfile?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 12.11.06 16:26 
Könnten bitte mal die Leute, die nichts zum Thema zu sagen haben, einfach mal gar nichts schreiben? So langsam reicht's mir hier!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: So 12.11.06 19:30 
user profile iconChristian S. hat folgendes geschrieben:
Könnten bitte mal die Leute, die nichts zum Thema zu sagen haben, einfach mal gar nichts schreiben? So langsam reicht's mir hier!


Ok, dann sage ich mal was dazu
1. wie speicherst Du momentan die Daten?
2. wie realisierst Du die Desktop-Capture Funktion?
3. muss die FPS Rate statisch sein?
4. was willst Du mit den gespeicherten Daten tun?

Ohne Infos zu den o.g. Fragen kann man Dir keinen Ratschlag geben.
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: So 12.11.06 20:54 
Soooooorrrrryyyyy .... habe kein Internet zu Hause und kann nicht täglich hier reinschauen.
Leider wurde bei uns rumgefuscht und somit die Downloads zerstört.

Und nein, ich versuche nix hochzupushen !

Zitat:
sag mal terra, wieso willst du 64 bilder je sekunde auf deine festplatte bannen

Ich möchte nicht 64 Bilder/sek auf platte speichern sondern ich möchte eine Menge Reserven haben, wenn das Video OnFly noch komprimiert werden soll. Sprich mit DivX oder anderen Filtern. Dadurch geht, wie jeder weiß die Framerate in den Keller. Und da niemand gerne bereit ist eine AVI (unkomprimiert) aufzunehmen sollten paar Frames mehr schon zur verfügung stehen.

Die Funktion soll einfach nur das grade zu sehende Desktop-Bild aufnehmen und abspeichern. In unserem Fall das Bild des Spielescreens. Bitte jetzt nicht kommen und sagen, ich solle nur das Fenster aufnehmen, das zusehen ist. (Sprich den Spielescreen). Es soll ja nicht NUR dieser Screen aufgenommen werden können.

Zitat:
Ok, dann sage ich mal was dazu
1. wie speicherst Du momentan die Daten?
2. wie realisierst Du die Desktop-Capture Funktion?
3. muss die FPS Rate statisch sein?
4. was willst Du mit den gespeicherten Daten tun?

Zu 1) Speichern tuh ich noch garnix weil ich nicht weiß, wie ich eine vernünftige Speicherroutine zusammenbekomme ... darum auch der Theard hier.

Zu 2) z.Z. noch ganz einfach über BitBlt(bm.Canvas.Handle,0,0,Width,Height,Dc,x,y,SRCCOPY);

Zu 3) das ist egal, solang am ende ein Ruckefreies Bild auf der Platte liegt ist da freier Handlungsspielraum.

Zu 4) Es soll eine Aufnahmefunktion für unsere Community werden, die in einem Hauptprogramm implementiert ist. Für ein Spiel Namens Silkroad Online. Das war eine Idee von unseren Communityleuten sowas mit in die Toolbox zu bauen. Daher hab ich mich mal unwissent dranngemacht :-)



Wann zum Kuckuck habe ich jemals geschrieben, das ich hier HD-DVD oder BlueRay mit dem Programm aufnehmen will? Ich finde solche Gerüchte im Umlauf zu bringen zum Kotzen, echt ! Mit HDDVD oder so wird die funktion rein garnichts zu tun haben. Die Funktion muss nichtmal den Ton aufnehmen müssen !

Und hier nochmal die Datei im Anhang ... hatte an das garnicht gedacht.

Danke,

Terra
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Terra am So 12.11.06 21:07, insgesamt 1-mal bearbeitet
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 12.11.06 21:03 
Mit und ohne Vorschau 64 Frames (ATI Radeon 9600 Pro), aber probier mal die Anzeige "Timer Clicks" nicht andauernd zu aktualisieren, das kostet Zeit.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: So 12.11.06 21:12 
Hmmm .... ich arbeite mit 2 Timern da ich nicht weiß, wie man eine ordentliche FPS-Abfrage erstellt ... ein Timer tickt alle 1 Sekunde und dieser Fragt jede Sekunde nach den vergangenden Bildern nach ... so ergibt sich dann halt die Framerate ... Möglich natürlich das dieses totaler humbug ist und ich schon genug Frames habe aber hab selbst bemerkt ab 20 -15 Frames fängt die Vorschau auch an zu ruckeln .. also so verkehrt kanns net sein ^^

Die Vorschau ist eigentlich auch nur dafür da um zu sehen ob überhaupt was geht. Solang die Vorschau aktiv ist soll auch nichts aufgenommen werden.

Bei der Aufnahme soll der reine Stream aufgenommen werden (ohne Anzeige und FPS analyse - unter anderem soll gleichzeitig halt ein Komprimierfilter dazwischen sein)

Terra
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 13.11.06 00:14 
Ohne Vorschau 100, mit 20 FPS
Mit Kompression...reden wir nicht drüber^^

System: Sempron 3000, Win2k, Geforce 5900XT, 1GB Ram, keine anderen Programme laufen.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."