![]() |
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:
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.
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; Hat jemand eventuell eine Idee? Das scheint als ob FLayout einfach nicht verwendet wird. |
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.
|
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 20:51 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