关闭TMediaPlayerControl并切换TabSheet时出现黑框

问题描述 投票:0回答:1

我使用FireMonkey开发了一个Android程序。该程序有一个

TTabItem
。我使用
TMediaPlayerControl
在 TabItem 下播放视频。在播放过程中,我切换TabItem,停止并隐藏播放器。在这种情况下,就很容易出现这种情况。黑匣子没有消失,我不知道为什么。

希望播放视频时,切换TabItem不会出现黑框。也就是说,播放器界面没有隐藏成功。代码如下:

player1->Stop();
playCtrl1->Visible = false;
tabControl1->ActiveTab = tabItem1;
android firemonkey c++builder
1个回答
0
投票

根据 bug #RSS-978,Android 上的

TMediaPlayer
可以创建多个平台播放器,但会泄漏它们。所以也许您看到泄露的玩家没有被隐藏。

错误报告提供了以下泄漏解决方法。也许它也能解决隐藏问题。

泄漏的原因在“source mx\FMX.Media.Android.pas”中。 FMX Delphi 为每个视频“TJMediaPlayer.JavaClass.init”创建播放器两次。一旦进入“procedure TAndroidVideo.RetreiveVideoSize”就可以获取视频图片的大小了。第二次在“构造函数 TAndroidMedia.Create”中,然后就可以播放视频文件了。

第一次他们忘记在“RetreiveVideoSize”中调用“MediaPlayer.release”。因此,在操作系统中创建的媒体组件的资源不会被释放。在某些 Android 设备上,应用程序会崩溃。

解决方案:自行修补“FMX.Media.Android.pas”。在“procedure TAndroidVideo.RetreiveVideoSize”中添加对“MediaPlayer.release”的调用。

procedure TAndroidVideo.RetreiveVideoSize;
var
  MediaPlayer: JMediaPlayer;
begin
  MediaPlayer := TJMediaPlayer.JavaClass.init; 
  MediaPlayer.setDataSource(StringToJString(FileName));
  MediaPlayer.prepare;
  FVideoSize := TSize.Create(MediaPlayer.getVideoWidth, MediaPlayer.getVideoHeight);
  MediaPlayer.release; // !!!!!!!  add this line   !!!!!!!
  MediaPlayer := nil;
end;
© www.soinside.com 2019 - 2024. All rights reserved.