mantas
-
Постов
2 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные mantas
-
-
Столкнулся с такой же проблемой.
Использую «RAD Studio 10 Seattle».
Каждый раз, когда у TMediaPlayer задаешь новый FileName, идёт утечка памяти – это баг Firemonkey.Скорее всего, ошибка находится в файле «FMX.Media.pas».
Как исправить эту ошибку? Что и как исправлять в файле «FMX.Media.pas»?
Цитатаhttps://quality.embarcadero.com/browse/RSP-12953
TMediaPlayer's (FileName) function causes a major memory leakType: Bug
Status: Open
Priority: Major
Resolution: Unresolved
Affects Version/s: 10 Seattle
Fix Version/s: None
Component/s: FireMonkeyDescription
Whenever you add the file (MediaPlayer1.FileName) the Clear command will not remove it from memory, the program will become unstable because of the large memory leaks and crash after adding multiple files.
How to clear the file after loading it in the MediaPlayer1?1 - Create new FireMonkey project
2 - add two buttons
Button 1 : MediaPlayer1.FileName:= 'E:\Buddha_Bar.mp3'; Large File
Button 2 : MediaPlayer1.Clear;Thank you
rayПроверил на «RAD Studio 10.2 Tokyo» - проблема утечки памяти тоже присутствует.
Просто в цикле задаешь новый (или даже тот же самый) TMediaPlayer.FileName, и каждый раз идёт утечка памяти, и очень скоро программа падает из-за недостатка памяти.
Функция TMediaPlayer.Clear не помогает, ибо память не освобождается.
Из-за этого бага TMediaPlayer является неработоспособным и TMediaPlayer просто невозможно использовать в реальных проектах.
Как решить эту проблему?
TMediaPlayer не запускает видео в некоторых версиях Андроида
в TMediaPlayer
Опубликовано
Перевод кода на Delphi:
procedure TMainForm.PlayVideo(AFileName: String); var EXE: String; PackageName: JString; activityManager: JActivityManager; Intent: JIntent; Data: Jnet_Uri; begin try //MX player: https://sites.google.com/site/mxvpen/api PackageName := StringToJString('com.mxtech.videoplayer.ad'); activityManager := TJActivityManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE)); activityManager.killBackgroundProcesses(PackageName); // <<-- requires entitlement enabled in project settings EXE := System.Ioutils.TPath.GetExtension(AFileName); Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW); Data := StrToJURI('file://' + AFileName); Intent.setDataAndType(Data, StringToJString('video/' + EXE)); Intent.setPackage(PackageName); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_NO_HISTORY); //SharedActivity().startActivity(Intent); SharedActivity.startActivity(Intent); except // on E: Exception do ErrorDialog(E.Message, E.HelpContext); Application.Terminate(); end; end;
Не забудьте добавить в файл манифеста: