AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Bild mittels TServerSocket für Browser bereitstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Bild mittels TServerSocket für Browser bereitstellen

Ein Thema von Nisbo · begonnen am 23. Apr 2005 · letzter Beitrag vom 3. Sep 2006
Antwort Antwort
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#1

Bild mittels TServerSocket für Browser bereitstellen

  Alt 23. Apr 2005, 11:09
Moin Moin,

Es geht darum das ich:
- mittels Delphi 5 Standard
- ein EinzelBild der TJvAVICapture Komponente
- an einem Port mittels der TServerSocket Komponente
bereitstellen möchte

Im Moment bin ich noch am testen um überhaupt erstmal ein Bild komplett zu übertragen
dazu nutze ich folgenden Code:

Delphi-Quellcode:
// Server starten
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
     ServerSocket1.Active := false;
     ServerSocket1.Port := StrToIntDef(Edit4.Text,8888); // Port 8888 ist Standard
     try
        ServerSocket1.Active := true;
     except
        raise;
     end;

     if ServerSocket1.Active then
     begin
       ToolButton13.Enabled := false;
       ToolButton12.Enabled := true;
       StatusBar1.Panels[1].Text := 'Server ist: ONLINE an Port ' + Edit4.Text;
     end;
end;


procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var fsWork : TFileStream;
    sBuffer : String;
    Stream : TMemoryStream;
begin
    Stream := TMemoryStream.Create;
    Stream.LoadFromFile(programmverzeichnis + '\testbild.jpg');
    Stream.Seek(0,soFromBeginning);

    Socket.SendStream(Stream);

    sleep(100);
    ToolButton13.Click;
end;
Info:
- in "programmverzeichnis" steckt der Path zur Anwendung drinn.
- ToolButton13.Click startet den Server neu (also TForm1.BitBtn1Click), das muß ich machen warum auch immer, geht auch nur mit dem sleep davor. (hatte ich durch testen herrausbekommen indem ich auf den Server-Start-Button gelickt hatte)

wenn ich jetzt per IPORT (123.456.789.123:888) das ganze im Browser aufrufe nachdem ich natürlich den Server gestartet habe wird ein teil vom Bild angezeigt, manchmal auch das ganze Bild doch meistens nur ca 2/3 vom Bild.

Tja jetzt kommt natürlich die Frage der Fragen: Wie bekomme ich das hin
Also zumindest erstmal das das TestBild korrekt übertragen wird.

Ich bin auch bereit mit Indy zu arbeiten wenn mir einer sagt welche Komponenten ich dnn da nutzen muß und wie
Danke schon mal im Vorraus

PS: bin kein Profi sondern noch Neuling in der Materie
Jens
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#2

Re: Bild mittels TServerSocket für Browser bereitstellen

  Alt 23. Apr 2005, 15:18
OK habe es mittels der Indy-Komponente TidHTTPServer hinbekommen, für alle die auch danach suchen der Code schaut jetzt so aus:

Delphi-Quellcode:
// Server starten
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
     IdHTTPServer1.Active := false;
     IdHTTPServer1.DefaultPort := StrToIntDef(Edit4.Text,8888); // Port 8888 ist Standard
     try
        IdHTTPServer1.Active := true;
     except
        raise;
     end;

     if IdHTTPServer1.Active then
     begin
       ToolButton13.Enabled := false;
       ToolButton12.Enabled := true;
       StatusBar1.Panels[1].Text := 'Server ist: ONLINE an Port ' + Edit4.Text;
     end;
end;


// Server beenden
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
     try
        IdHTTPServer1.Active := false;
     except
       raise;
     end;

     if not IdHTTPServer1.Active then
     begin
       ToolButton13.Enabled := true;
       ToolButton12.Enabled := false;
       StatusBar1.Panels[1].Text := 'Server ist: OFFLINE';
     end;
end;


// Bild liefern
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var Stream : TMemoryStream;
begin
    Stream := TMemoryStream.Create;
    Stream.LoadFromFile(programmverzeichnis + '\testbild.jpg');
    Stream.Seek(0,soFromBeginning);

    AResponseInfo.ContentType:='Content-Type: image/jpeg';
    AResponseInfo.ContentStream := Stream;
end;
jetzt muß ich es nur noch hinbekommen von der TJvAVICapture ein einzelbild einzufangen.
hat da jemand noch eine Idee ?
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Assun
Assun

Registriert seit: 3. Feb 2005
Ort: Hilzingen am Bodensee
469 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Bild mittels TServerSocket für Browser bereitstellen

  Alt 26. Apr 2005, 18:13
hey !

Das Beispiel funktioniert zwar. Aber eben noch nicht so ganz

Ruft man bei einem gestarteten Server nämlich z.b. 127.0.0.1:8888 auf, so wird das Bild im Verzeichniss nich im IE/Explorer/FireFox angezeigt, sondern lediglich der Download-Dialog erscheint.

Weiss jemand wie man dies ändern könnte ?
Sebastian Dietrich
http://Assun.de - bald komplett überarbeitet
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#4

Re: Bild mittels TServerSocket für Browser bereitstellen

  Alt 27. Apr 2005, 03:38
bei mir schaut das jetzt so aus:

Delphi-Quellcode:
// Bild liefern
procedure TForm1.IdHTTPServer1CommandGet(
           AContext : TIdContext;
           ARequestInfo : TIdHTTPRequestInfo;
           AResponseInfo : TIdHTTPResponseInfo);
var Stream : TMemoryStream;
var jp : TJPEGImage;
begin
    AviCap.CopyToClipboard;

    Image2.picture := nil;
    Image2.Picture.Bitmap.Assign(Clipboard);

    jp := TJPEGImage.Create;
    try with jp do begin
       Assign(Image2.Picture.Bitmap);
    end;
    except
    end;

    Stream := TMemoryStream.Create;
    jp.SaveToStream(Stream);

    Stream.Seek(0,soFromBeginning);
    AResponseInfo.ContentType := 'Content-Type: image/jpeg';
    AResponseInfo.ContentStream := Stream;

    jp.free;
end;
allerdings ist: AviCap.CopyToClipboard; nicht unbedingt ne gute lösung nen einzelbild zu bekommen, funktioniert zwar aber man blockiert die Zwischenablage

hat da jemand noch ne Idee wie das besser geht ? hatte da was von GrabFrame gelesen aber irgendwie komme ich damit nicht klar
Jens
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#5

Re: Bild mittels TServerSocket für Browser bereitstellen

  Alt 3. Sep 2006, 17:25
Hallo nisbo,

ich hab da eine andere Variante getestet, und die funktioniert so gut und schnell, dass ich die jpgs im Browser als bewegtes Bild übers Internet sehen kann.

Damit ich nicht bei jedem Bild einen memorystream createn muss, verwende ich .sendtext() . Als Parameter gebe ich den Datenstring eines Stringstreams mit, der die jpgdaten enthält. Die Daten werden umgespeichert, damit die Callbackfunktion von Video for Windows das nächst Bild hinterlegen kann, während das vorherige noch über den socket übertragen wird.

VfW und tServerSocket haben sich im Zusammenspiel gut bewährt.

der flossinger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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