Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdHttpServer (https://www.delphipraxis.net/166601-idhttpserver.html)

Gloegg_FHBI 21. Feb 2012 13:02

IdHttpServer
 
Hallo DP,

Ich habe eine Delphi-Anwendung, die mithilfe des TVideograbbers (Datastead) ein Video abspielt. Diese Anwendung steuere ich mithilfe einer iPhone-App. Dazu habe ich ein Datenmodul mit einem IdHttpServer hinzugefügt und folgenden OnCommandGet-EventHandler:
Delphi-Quellcode:
procedure TdmNetwork.httpServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  jo : IJSONObject;
  ctx : TRttiContext;
  typ : TRttiType;
  m : TRttiMethod;
  param : TValue;
begin
  jo := TJSON.NewObject(ARequestInfo.Params.Values['p']);
  param := TValue.From<IJSONObject>(jo);
  ctx := TRttiContext.Create;
  try
    typ := ctx.GetType(TMyVideoPlayer);
    m := typ.GetMethod(jo.GetString('Command'));
    AResponseInfo.ContentText := m.Invoke(fVideoPlayer,[param]).AsString;
  finally
    ctx.Free;
  end;
end;
In der App schicke ich dann z.B. so einen Request:
Code:
- (void) play
{
  NSURL *url = [NSURL URLWithString:@"http://ip.vom.rechner/?p={"Command":"Play"}"];
  NSString *response = [NSString stringWithContentsOfURL:url];
}
funktionert soweit prima.

Allerdings wollte ich jetzt eine Trackbar zur Fortschrittsanzeige in der App haben. Dazu habe ich in der App einen Thread erstellt, der mir alle 900ms die aktuelle Position abfragt und dann entsprechend die Value von einem UISlider (iOS-Äquivalent zu TTrackBar) setzt. Ist nicht die schönste Lösung, da hier gepollt wird, aber so komme ich um die Programmierung eines Servers in Objective-C herum.

Allerdings habe ich jetzt Ruckler im Video (kaum sichtbar im Bild, aber deutlich hörbare Audioruckler).


hier noch die Implementierung von GetPosition:
Delphi-Quellcode:
function TMyVideoPlayer.GetPosition(jo: IJSONObject): string;
var
  joResult : IJSONObject;
begin
  joResult := TJSON.NewObject;
  joResult.Put('Position',fVideoForm.getPosition);
  result := joResult.ToString;
end;
Der IdHttpServer macht für jede anfrage einen neuen Thread auf, in dem dann OnCommandGet ausgeführt wird, warum kommt es dann zu den rucklern?

PS: Ich weiß, dass das DataSnap für Arme ist, aber ich hab leider nur die Prof. und nicht die Enterprise ;-)

mjustin 21. Feb 2012 13:32

AW: IdHttpServer
 
Zitat:

Zitat von Gloegg_FHBI (Beitrag 1152135)
Dazu habe ich in der App einen Thread erstellt, der mir alle 900ms die aktuelle Position abfragt und dann entsprechend die Value von der TrackBar setzt.

Die iPhone App fragt also auch über den Delphi Indy HTTP Server die Position ab (um sie auf dem iPhone anzuzeigen), gleichzeitig wird auf dem Server die Trackbar Position gesetzt?

Ich würde das Setzen der Trackbar Position auf dem Formular als ersten Kandidaten weglassen, vielleicht liegt hier der Grund für den Ruckler.

Gloegg_FHBI 21. Feb 2012 13:51

AW: IdHttpServer
 
Sorry, hab ich mich falsch ausgedrückt. In der Anwendung gibt es keine TrackBar. In der App gibt es einen UISlider und der wird nur zum anzeigen benutzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 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