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

Воспроизвидение видео в TMediaPlayer по кругу


Kitty

Вопрос

В стандартных примерах Embarcadero есть пример использования на мобильном устройстве TMediaPlayer. Пример есть и на паскале и на С++. На С++ он тут:

C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\CPP\Mobile Snippets\VideoPlayback

Видео нормально воспроизводится на моем андроид устройстве.

 

Как заставить видео работать в зацикленном режиме? Мне надо чтобы видео играло по кругу. TMediaPlayer может сделать зацикливание при воспроизведении видео? Эта функция есть у всех стандартных плеерах.

 

Спасибо.

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий

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

  • 0
  • Администраторы

Самый простой вариант реализации воспроизведения аудио/видео по кругу является использование таймера:

procedure TFormPlayer.PlayerTimerTimer(Sender: TObject);
begin
  // Выполнять таймер с интервалом 1 секунда
  if MediaPlayer.State = TMediaState.Stopped then
  begin
    MediaPlayer.CurrentTime := 0;
    MediaPlayer.Play;
  end;
end;
Ссылка на комментарий
  • 0

Значит, межу воспроизведениями будет секунда паузы, и пользователь увидит черный экран?
Медиа классик плеер воспроизводит видео по кругу без задержки и пользователь не замечает перезагрузку видео от конца к началу. MX плеер из Андроид маркета, если в его настройках поставить, галочку программное декодирование, тоже крутить видео без видимого для пользователя перехода от конца к началу. Если видео ролик представляет собой рекламную композицию, то очень досадно, когда появляется черный секундный экран при переходе.

Может ли FMX плеер справиться с такой задачей – проигрывание видео по кругу без заметной паузы перехода от конца к началу?

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

Поставьте задержку 100 мсек (или 24 кадров в секунду). Я попробовал это на стандартном виндовом примере MediaPlayerHD и там я не вижу проблемы черного экрана (Даже при интервале таймера в 1 секунду). 

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

Согласно рекомендациям модифицировала стандартный пример Embarcadero:

#include <fmx.h>
#include <System.ioutils.hpp>
#pragma hdrstop

#include "VideoForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TVideoPlayBackForm *VideoPlayBackForm;
//---------------------------------------------------------------------------
__fastcall TVideoPlayBackForm::TVideoPlayBackForm(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TVideoPlayBackForm::videoBtnClick(TObject *Sender)
{
  /*Under Project-Deployment, we added the media file and set the remote path.
  When the program starts, everything in the directory that is set under remote path is
  copied over to the Documents folder on the device. The MediaPlayer loads the file from
  the Documents folder*/
#if defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || defined(__ANDROID__)
	MediaPlayer1->FileName =
		IncludeTrailingPathDelimiter(System::Ioutils::TPath::GetDocumentsPath()) + "Ocean.mp4";
#endif
	MediaPlayer1->Play();
	Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TVideoPlayBackForm::Timer1Timer(TObject *Sender)
{

  // Выполнять таймер с интервалом 1 секунда
  if(MediaPlayer1->CurrentTime == MediaPlayer1->Duration)
  {
	MediaPlayer1->CurrentTime = 0;
	MediaPlayer1->Play();
  }
}
//---------------------------------------------------------------------------

На моем планшете с андроид, видео проиграло один раз и замерло. Где моя ошибка?

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

Используйте лучше другой вариант определения окончания видео. Такой вариант работает:

  if MediaPlayer1.State = TMediaState.Stopped then
  begin
    MediaPlayer1.CurrentTime := 0;
    MediaPlayer1.Play;
  end;
Ссылка на комментарий
  • 0

Большое спасибо! Черный экран не наблюдается.

Для С++ пользователей:

if(MediaPlayer1->State == TMediaState::Stopped)

 

Если таймер=100 мс и программа должна работать 24 часа в сутки, то не перегрузит ли это процессор?

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...