AGB  ·  Datenschutz  ·  Impressum  







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

TAndroidVideo-Bug?

Ein Thema von Peter666 · begonnen am 23. Apr 2014 · letzter Beitrag vom 24. Apr 2014
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

TAndroidVideo-Bug?

  Alt 23. Apr 2014, 16:22
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.
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#2

AW: TAndroidVideo-Bug?

  Alt 23. Apr 2014, 20:01
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.
Angehängte Dateien
Dateityp: zip demo.zip (10,6 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#3

AW: TAndroidVideo-Bug?

  Alt 24. Apr 2014, 11:22
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);
  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 06:27 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