Screenshots Live Übertragen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Screenshots Live Übertragen

Beitrag von PureBasic4.0 »

Hi, Leute

Ich möchte einen Livestream des Bildschirms (Server) an einen anderen (im Netzwerk angeschlossenen (Client)) Computer senden, der dann das ganze Live auf den eigenen Bildschirm streamt. Gibt es dafür irgendwelche Codes? Ich brauche eine effiziente Methode, da ich nur begrenzt CPU Leistung dafür verschenken möchte. Mit einem Netzwerk Datendurchsatz von 108 MBit/s dürfte es eigentlich kein Problem darstellen.
Das Ganze möchte ich auch noch mit dem Audiostream machen und einer Webcam. Ist aber erst mal nebensächlich

//Edit: Habe schon die SuFu benutzt, aber nichts gefunden, dass sich einfach in ein Programm einbinden lässt
Zuletzt geändert von PureBasic4.0 am 24.02.2007 16:51, insgesamt 6-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

hat jemand ne idee?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

ich hab noch nie nen Stream selber ausgelesen geschweige denn geschickt.
Cam Übertragung mach ich immer mit Einzelbildern und einem selbst geschriebenen "Protokoll"
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

dauert aber zu lange. Selbst ohne Netzwerk-Übertragung braucht es 100% CPU-Leistung, auch mit Delay(1000/24) - Befehl

Hat sonst noch jemand ne idee?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

bei mir nicht, aber ich denke auch, das das nicht die eleganteste variante ist
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

sondern?
Ich benutze den Code aus dem CAV (mit der Procedure MakeDesktopScreenshot)
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hier, dingens... Darky hat mal ne Lib geschrieben, die den Zugriff auf eine Cam ermöglicht (siehe Forum). Ich glaube, seine Lib ist sogar PB 4.0 kompatibel (hoffe, ich verspreche dir grad nix falsches).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

aber damit kann man schlecht einzelne bilder aus dem arbeitsspeicher auslesen und per network verschicken
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

hat jemand noch irgendeinen code oder ne lib, die man benutzen könnte?
Habe mal den Code aus dem Archiv ausprobiert (MakeDesktopScreenshot()) und diesen über's netzwerk an localhost versendet. Beide (Server und Client) mit Delay(1000/24) Befehlen, aber die CPU-Auslastung sieht so aus (Türkis=Server, Grün=Client):

Bild

--> 100% Benötigte Systemleistung. Möchte aber, dass man den PC ganz normal nutzen kann (z.B.: für anspruchsvolle Spiele)
Möchte aber, dass möglichst wenig Leistung verbraucht wird. Ich muss leider die Screenshots zwischenzeitig (24 Bilder/Sekunde) auf der Festplatte speichern, weil ich das mit MakeDesktopScreenshot() gemachte Bild nicht über den Arbeitsspeicher auslesen und mit SendNetworkData() versenden kann (oder gibt es dafür einen Code?). Das Speichern der Daten auf der Festplatte braucht wahrscheinlich die ganze Leistung, deswegen benötige ich vorerst einen Code zum Speichern und Versenden von Bildern in/aus dem Arbeitsspeicher. Habe das Ganze auch schon mal über SetClipboardImage(#Image) versucht, aber wie soll man das dann über's Netzwerk versenden können?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag von dige »

Du musst Dir zunächst mal ein geeignetes Protokoll mit Datenreduktion
überlegen.
Zum Bsp. nur die Bildzeilen senden die sich geändert haben und
die schnelle BriefLZ Kompression verwenden.
Das Protokoll könnte dann zum Bsp. so aussehen:
<Long: UnpackSize><Data Container>

Der entpackte DatenContainer könnte dann folgendermaßen aussehen:
<Word:ZeilenNummer><RGB-Array>

Diese Zeilen überschreiben dann das aktuelle Bild.

Evtl. würde ich die Daten nicht mit dem lahmen SendNetworkData()
übertragen, sondern mit ( mir fällt die Bezeichung grad nicht ein )
Network Pipes? machen ...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten