Thema: Delphi IdHttpServer

Einzelnen Beitrag anzeigen

Benutzerbild von Gloegg_FHBI
Gloegg_FHBI

Registriert seit: 28. Nov 2006
Ort: Neuss
46 Beiträge
 
Delphi 10 Seattle Professional
 
#1

IdHttpServer

  Alt 21. Feb 2012, 13:02
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

Geändert von Gloegg_FHBI (21. Feb 2012 um 13:53 Uhr) Grund: korrektur von missverständlicher Komponente
  Mit Zitat antworten Zitat