Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как сделать автоматическое закрытие окна с видео по окончании проигрывания файла?


voytalexey

Вопрос

В DelphiXE6, проект под Андроид, на свою форму кладу Mediaplayer, по кнопке задаю ему файл и вызываю метод Play. По окончании проигрывания файла на экране висит либо последний кадр, либо черный экран (на двух устройствах по-разному). Для того чтоб снова увидеть свою форму приходится нажимать вручную системную кнопку "Назад". Как можно сделать чтоб окно проигрывателя скрывалось само и показывалась моя форма без участия пользователя сразу по окончании файла видео?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Задача сводится к получению события завершения воспроизведения файла. В FMX MediaPlayer не имеет такого функционала. Мне здесь видится два варианта:
1. В начале воспроизведения медиа запустить таймер с проверкой в OnTimer достижения метки TMediaPlayer.Duration, после чего осуществлять необходимые действия. 

2. Так как задача под Android, то можно посмотреть в сторону медиаплеера этой ОС

var player JMediaPlayer;
.........
player:=TJMediaPlayer.Create;
player.setDataSource(StringToJString(file_path)); 
player.prepare; 
player.setLooping(true); //Если нужно - закольцевать, в FMX этой функции также нет
player.setOnCompletionListener(JMediaPlayer_OnCompletionListener); //установка обработчика окончания воспроизведения

Сам я никогда не пользовался JMediaPlayer_OnCompletionListener, для моих задач требовалось SetLooping(true), и воспроизводил я только аудио. О реализации этого метода достаточно подробно написано здесь http://stackoverflow.com/questions/9962998/oncompletion-listener-with-mediaplayer.

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0

Уточню вопрос. Задача не в том чтоб узнать об окончании воспроизведения (это я могу сделать по таймеру проверяя состояние плеера).

Проблема в том что он остаётся поверх моей формы, и вот как мне заставить его убраться я не знаю.

Ссылка на комментарий
  • 0

TMediaPlayerControl при проигрывании видео всегда отображается поверх всех элементов. Это особенность реализации плеера в FMX.
Можно попробовать TMediaPlayerControl.Visible:=False;

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0
1 час назад, Alex7wrt сказал:

Можно попробовать TMediaPlayerControl.Visible:=False;

Попробовал. Не помогло.

Более того, вообще удалил MediaPlayerControl с формы, а поведение не изменилось. Похоже, для Андроида он не нужен, достаточно только MediaPlayer-а.

Ссылка на комментарий
  • 0

Пока сделал на базе TJVideoView и TJDialog примерно как описано в http://fire-monkey.ru/topic/2154-native-android-videoview/ 

В этом случае смог воспользоваться методом FDialog.hide. Так что срочный костыль нашелся, теперь буду спокойно искать более изящное решение.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...