VB.net -> Webcam bild online streamen (http)

String

Erfahrenes Mitglied
Servus,

ich hab da mal eine Frage.. Wie stelle ich ein Bild online?

Also zu den Funktionen meines Programms:

- WebCam-Bild wird in einer PictureBox angezeigt
- TCP-Listener wartet auf Clienten, nimmt diese an, und sendet ein kurzes "hallo" zurück.

Das Programm läuft auf einem Windows-Server, soll aber statt des "hallo" das Webcam-Bild antworten.

Also: ich gebe im Browser IP:portVomProgramm ein und dort erscheint das WebCam-Bild (derzeit leider nur ein kleines "hallo").

Es muss kein Live-Stream sein, da es sich nur um eine Art "Wetter-Cam" handelt und sich die PictureBox so oder so nur alle 10 Minuten aktualisiert.

Hoffe mein Problem ist verständlich. Bei Fragen bitte einfach Posten.

Danke im Voraus für deine Hilfe.

paD

PS: Das Bild alle 10 Minuten in dem Apache verzeichnis zu Speichern und es dann "einfach so" aufzurufen will ich möglichst vermeiden!
 
Du machst einfach aus dem Bild ein Byte-Array und schickst das dann über die Leitung. Dein Client macht dann aus dem Array wieder ein Bild.

Angenommen du hast schon ein Image-Objekt mit dem Namen image (C#-Code, sollte aber recht schnell nach VB umgesetzt werden können):

Code:
Stream stream = new MemoryStream();
image.Save(stream, ImageFormat.###);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, (int)stream.Length);

...und dann ab mit den bytes durch die Leitung
 
joa klar, aber wie ich schon schrieb zu einem Browser übertragen.
also sprich HTTP oder so ^^
 
...dann verbirgt sich mir aber der Sinn von dem, was du vor hast!

Wenn ich als 08/15 Internetklicker mir ein Bild angucken will, dann tippe ich ein bild.zeigmirdasbilddasichwill.de und freue mich, dass ich das Bild sehe. Dazu ist doch wirklich der Aufwand zu groß, meinst du nicht?
 
hm?

ne, sry ich glaube du hast mich miss-verstanden.

ich gebe ein: http://www.blablablubbblubb.de dort erscheint dann eine seite wo das erzeugte (in VB erzeugte) bild erscheint.

wenn ich auf die blabla.. -seite gehe spricht diese automatisch mein Programm an (was auf dem Server läuft) und erstellt das Live-Bild (dieses soll dann unten angezeigt werden)

Hmpf.. wenn ich nich wüsste was ich will, würde ich mich glaub ich selber nicht verstehen, doch ich weiß nicht wie ich es anders erklären sollte...

paD
 
Mal ne Frage kannste den Quelltext deines Programmes zeigen? ;)
Würde damit auch mal gerne rumexperiminitieren.
 
Also ich hab schon Bilder an den Browser gesendet. Ich arbeite gerade an einer Anwendung mit der man Winamp über den Browser steuern kann, denn ich will mit der PSP aufm Bett rumliegen können ohne immer aufstehen zu müssten um ne MP3 zu wechseln oder zu löschen.

Gibt zwar ein Plugin für Winamp was sowas ähnliches kann aber das kann erstens nich löschen und 2. passt das UI nicht auf die PSP.

Mein Problem mit den Grafiken ist eher dass die blöde PSP die Bilder nicht Cachen will. Meine Frage hierzu wäre, was muss ich mit dem Header über TCP vor den Bilddaten senden damit die nicht alles neu lädt sondern die Grafiken ausm Cache nimmt? Die hat ja 2 MB Cache aber lädt die 6 Gifs immer neu.

Hier der Header Code, ist ein Ausschnitt aus einer Klasse daher der unlogische Aufbau ^^
Ausgelesen hab ich das ganze indem ich einfach ne TCP Verbindung zu meinem Apache Server gemacht habe und ne Seite und dann ne Grafik angefordert habe. Man muss ja nur ne Connection aufbauen und dann "GET <was man haben will> HTTP/1.1" oder so senden und schon kommt das passende Datenpaket, man sollte der einfachheit halber aber vorher den ReceiveBuffer des TCP Clients hochgenug stellen, sonst muss man mehrmals empfangen.

Code:
Public Server As String = "HTTP Sender"
Public Keep_Alive As String = "timeout=5, max=100"
Public Connection As String = "Keep-Alive"
Public Transfer_Encoding As String = "chunked"
Public Content_Type As String = "text/html; charset=iso-8859-15"

Dim Header As String = "HTTP/1.1 200 OK" & rlnl & _
"Date: " & Date.Now.ToString("R") & rlnl & _
"Server: " & Server & rlnl & _
"Keep-Alive: " & Keep_Alive & rlnl & _
"Connection: " & Connection & rlnl & _
"Transfer-Encoding: " & Transfer_Encoding & rlnl & _
"Content-Type: image/" & Format.ToString.ToLower & rlnl & rlnl & "3824" & rlnl
 
Folgender Lösungsweg:

Dein Programm holt sich das aktuelle Picture von der Cam und speichert dies unter einem bestimmten Namen auf dem Webserver. Deine Webseite referenziert immer genau dieses Bild. Den Austauschvorgang machst du beispielsweise alle 2 Minuten oder wie aktuell das Bild halt sein muss.

Alles andere bringt dir nur unnötig Probleme.
 
Wenn dein Bild aktualisiert wird, aber denselben Namen trägt, kann es passieren, dass der Browser das gecachte Objekte anzeigt. Deswegen empfielt es sich den Namen immer zu ändern (lokale Uhrzeit oder sonstwas hinten dranhängen).

Ich habe das bei meinem Community Portal so gemacht, dass ich die Sekunden der aktuellen Uhrzeit hinten an den Bildnamen angefügt habe, dieses String dann in einer Datenbank gespeichert habe und sich die Webapplikation von dieser Datenbank immer den aktuellen string genommen hat. Hat super funktioniert...
 
Zurück