Перейти к содержанию
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 часа в сутки, то не перегрузит ли это процессор?

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