AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WebCam via Stream senden

Ein Thema von ByTheTime · begonnen am 18. Sep 2012 · letzter Beitrag vom 30. Sep 2012
 
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#5

AW: WebCam via Stream senden

  Alt 19. Sep 2012, 09:04
Hallo!

Mir scheint, Du verwendest meinen DirectX-Port. Der bietet eine Callback Routine an, dann kannst Du Dir den Umweg über die TPaintbox sparen.

Definiere eine Callback-Routine wie folgt:
Delphi-Quellcode:
procedure TForm1.OnNewVideoFrame(Sender : TObject; Width, Height: integer; DataPtr: pointer);
begin
  // Denkbar wäre, hier ein Busy-Flag zu testen und zu setzen.

  // So holst Du das Bitmap direkt ab:
  fVideoImage.GetBitmap(fVideoBitmap); // fVideoBitmap mußt Du Dir halt noch als TBitmap zuvor erzeugen
  // Alternativ kannst Du gleich den übergebenen Pointer verwenden:
  // Der zeigt auf die Bilddaten (in 24bit RGB oder 8bit Grau, falls "Gray8Bit" gesetzt war
  // Die Speichergröße ergibt sich aus Width*Height*3 (bzw. beim Graustufenbild ohne das *3)
  // (Da die Breiten der Videos meist durch 4 teilbar sind, muß man sich nicht darum kümmern,
  // dass bei Bildern die Scanlines auf ein Vielfaches von 4 Bytes aufgefüllt wird)

  // Hier kommt Dein Code rein zum Packen und verschicken...
  // z.B.: (ohne ZCompress zu kennen): ZCompress(MStream.memory, MStream.size, DataPtr^, Width*Height*3, ...
end;
Statt Deinem Code hier:
 fVideoImage.SetDisplayCanvas(PaintBox1.Canvas); //Brauche ich das überhaupt? Oder wie kriege ich das Bild dann in die SendStream Prcedure rein? meldest Du diesen Callback wie folgt an:
fVideoImage.OnNewVideoFrame := OnNewVideoFrame; (Du kannst natürlich die Zuweisung an die Paintbox drinlassen, dann sparst Du Dir das selber-zeichnen.)

Nebenbei:
Der Foreneintrag, auf den Du in Deinem ersten Post verweist, hatte auch das Problem mit dem Packen der Daten. Ich hatte damals schon darauf hingewiesen, dass viele WebCams ihre Daten sowieso schon gepackt schicken, und in meinem Code-Misthaufen entpackt werden, bevor sie als Bitmap weitergereicht werden.
Das wäre natürlich ein Zwischenschritt, den Du rauslassen könntest, und das Entpacken des Videoframes erst auf der Zielseite machst. Aber natürlich: Die Packqualität ist halt wieder abhängig vom Codec, und Du müßtest in meinem Code-Durcheinander eingreifen...


Gruß
Michael
  Mit Zitat antworten Zitat
 


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 05:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz