Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   TAndroidVideo-Bug? (https://www.delphipraxis.net/180110-tandroidvideo-bug.html)

Peter666 23. Apr 2014 15:22

TAndroidVideo-Bug?
 
Hi,

ich hänge gerade an einem Fehler in der Videoklasse von Firemonkey. Die Wiedergabe von Webstreams funktioniert nicht richtig, genauer gesagt wird die Anzeige nicht auf das Vollbild skaliert.
Was ich genau geändert habe, damit es überhaupt geht ist folgendes:

Delphi-Quellcode:
 TOnPreparedListener = class(TJavaLocal, JMediaPlayer_OnPreparedListener)
  private
    FParent: TAndroidVideo;
  public
    constructor Create(const Parent: TAndroidVideo);
    procedure onPrepared(mp: JMediaPlayer); cdecl;
  end;

...
constructor TOnPreparedListener.Create(const Parent: TAndroidVideo);
begin
  inherited Create;
  FParent := Parent;
end;

procedure TOnPreparedListener.onPrepared(mp: JMediaPlayer); cdecl;
var
  width, height: Integer;
begin
  CallInUIThread(
    procedure
    begin
      width := mp.getVideoWidth;
      height := mp.getVideoHeight;
      Toast('Start Video: ' + inttostr(width) + 'x' + inttostr(height));
      FParent.FVideoSize := TSize.Create(width, height);
      FParent.RealignView;
    end);
end;
..
constructor TAndroidVideo.Create(const AFileName: string);
begin
  inherited Create(AFileName);
  FVideoSize := TSize.Create(0, 0);
  CallInUIThread(
    procedure
    begin
      FOnPrepareListener := TOnPreparedListener.Create(Self);

      FDialog := TJDialog.JavaClass.init(SharedActivity, -1);
      FDialog.setCancelable(True);
      FVideoPlayer := TJVideoView.JavaClass.init(SharedActivity);
      FVideoPlayer.setOnPreparedListener(FOnPrepareListener);
      FVideoPlayer.setVideoPath(StringToJString(FileName));

      FVideoPlayer.setMediaController(TJMediaController.JavaClass.init
        (SharedActivity));
      FVideoPlayer.requestFocus(0);

      FLayout := TJLinearLayout.JavaClass.init(SharedActivity);
      FLayout.addView(FVideoPlayer);

      FDialog.setContentView(FLayout);
      RealignView;
    end);

  FOrientationChangedId := TMessageManager.DefaultManager.SubscribeToMessage
    (TOrientationChangedMessage, OrientationChangedHandler);
end;

procedure TAndroidVideo.RealignView;
const
  GreatThatScreen = 100;
  // To be sure that destination rect will fit to fullscreen
var
  VideoRect: TRectF;
begin
  if Assigned(FLayout) and (not FVideoSize.IsZero) then
  begin
    VideoRect := TRectF.Create(0, 0, FVideoSize.width * GreatThatScreen,
      FVideoSize.height * GreatThatScreen);
    VideoRect.Fit(TRectF.Create(0, 0, Screen.Size.width, Screen.Size.height));

    FLayout.setPadding(VideoRect.Round.Left, VideoRect.Round.Top,
      Screen.Size.width - VideoRect.Round.Right, Screen.Size.height -
      VideoRect.Round.Bottom);
  end;
end;
Ich bekomme die korrekte Bildgröße geliefert, aber er pappt beim RealignView das Bild an die obere linke Ecke und belässt die Größe der Anzeige bei ziemlich genau dem was onPrepared geliefert wird.

Hat jemand eventuell eine Idee? Das scheint als ob FLayout einfach nicht verwendet wird.

Peter666 23. Apr 2014 19:01

AW: TAndroidVideo-Bug?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei mal das Beispiel im Quellcode. Was mir aufgefallen ist, ist das nach ein paar Sekunden der Bildschirm sich anpasst, allerdings nicht an die Maße die richtig wären.

CHackbart 24. Apr 2014 10:22

AW: TAndroidVideo-Bug?
 
Ich weiß nicht ob es mit der Implementierung in der XE6 funktioniert, aber das ist definitiv ein Fehler. Den OrientationHandler und das RealignView kannst du getrost löschen. Es reicht bei dem FLayout noch die Gravity und die Ausrichtung zu setzen.

Delphi-Quellcode:
      FLayout := TJLinearLayout.JavaClass.init(SharedActivity);
      FLayout.setGravity($11);
      FLayout.setOrientation(1);
      FLayout.addView(FVideoPlayer);


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