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

Воспроизведение одного видео в двух окнах, Windows


Alex7wrt

Вопрос

Добрый день.

Интересует, можно ли в FMX реализовать воспроизведение видео из одного файла одновременно в двух окнах или компонентах, чтобы в каждый момент времени в них был один и тот же кадр. Желательно без потерь в производительности по сравнению с выводом на один приемник, либо с минимальными потерями. Окна разного размера. Одно маленькое, другое большое. Что-то вроде главного окна и предварительного просмотра

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

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

  • 0

Я как-то ради баловства начинал делать что-то подобное. Как раз синхронное воспроизведение одного ролика в 2-х разных окнах. (2 и даже 3 видео FullHD без проблем и тормозов воспроизводилось на ноуте. Компоненты нашел какие-то, работающие через FFMPEG (вроде). Но наткнулся на одну очень неприятную проблему. Если даже получится одновременно запустить 2 видео одновременно, то в случае их рассинхронизации не получится спозиционировать один из потоков на конкретный кадр (и даже на конкретную временную метку). Дело в том, что в видео хранится не каждый кадр. Хранится опорный кадр, в после него несколько (иногда несколько десятков) кадров, в которых содержится информация только об изменениях в опорном кадре. Поэтому и спозиционировать видео можно только на опорный кадр. (Точнее можно спозиционировать на любую метку, но до первого опорного кадра на видео будет отображаться хрень). 

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

Если только под винду - могу посоветовать Mitov VideoLab. Только они платные. Бесплатно - будет надпись на видео. Там никаких проблем с нагрузкой, скоростью и синхронностью - хоть 10 окон сделайте.

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

Ну если бы не FMX - было бы намного проще... В смысле - реализация Вашей задачи под Windows.

А в FMX пока, к сожалению, работа с мультимедиа "хромает". В том смысле, что пока мало компонентов, да и рассматривается FMX, в первую очередь, как простой "инструмент" для создания кроссплатформенных приложений. И здесь нужно понимать, что именно из-за этого и сложно реализовать серьезные компоненты (в частности - для работы с аудио и видео).

Хотя, думаю, что со временем все появится. И вполне приличное. А пока либо сами, "ручками", либо приобретаете то, что есть.

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

Вот, кстати, Андрей Ефимов создал тему. Вот и сформулируйте правильно вопрос, на который бы Вы хотели получить полноценный и развернутый ответ.

Вдруг наши гуру обратят на него внимание!? )))

Ну а если нет - будем ждать..

Все-таки работа с видео, в частности его скоростное воспроизведение средствами FMX, - "больная" тема...

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

Снова возвращаюсь к этому вопросу.
Так как программу пишу под Windows, то для реализации подходит и VCL. Хотя в FMX есть многие плюшки, к которым уже привык.

В FMX пробовал через DirectShow - захватом кадра из видео и сохранением его в Bitmap для последующего отображения на другом приемнике. Но здесь проблема в низкой производительности, поскольку сохранение кадра происходит в VCL.Bitmap, конвертация которого в FMX.Bitmap требует много ресурсов (с учетом необходимости сохранить частоту кадров):
 

var
  bSize: integer;
  pVideoHeader: TVideoInfoHeader;
  MediaType: TAMMediaType;
  Buffer: Pointer;
  tmp: array of byte;
  FMXBMP: TBitmap;
  datas: TBitmapData;
begin
  Result := E_FAIL;
  if FSampleGrabber = NIL then EXIT;
    Result := FSampleGrabber.GetCurrentBuffer(bSize, NIL);
    if (bSize <= 0) or FAILED(Result) then EXIT;

  try
      SetLength(tmp, bSize);
      try
          FSampleGrabber.GetCurrentBuffer(bSize, @tmp[0]);
          fmxbmp:=tbitmap.Create(640,480);
          fmxbmp.Map(TMapAccess.Write,datas);
          copymemory(datas.Data,pointer(tmp),bSize);
          fmxbmp.Unmap(datas);

          image1.Bitmap:=fmxbmp;

      except
          Result := E_FAIL;
      end;
  finally
      SetLength(tmp, 0);
      FMXBMP.Free;
  end;

Также пробовал в VCL с ActiveX компонентами TVLCPlugin2 и TWindowsMediaPlayer. Они, конечно, хорошо подходят для воспроизведения видео, но выводить на два приемника с их помощью также не получилось.
Воспроизведение одного файла двумя экземплярами плеера мне не подходит - нужна четкая синхронизация по паузе, звуку, и т.д.
Может кто-нибудь подскажет, с помощью чего это можно сделать? Если есть такой инструмент на VCL, годов переписать программу для него, так как данный момент самый критичный.

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

я всегда за то чтобы купить. я себя не считаю системщиком вообще, следовательно, когда я полезу разбираться что там надо, чтобы работало DirectShow, то это надолго

за это же время можно заработать на уже отлаженные Mitov библиотеки

тут возможно вариант неафишируемый - можно в одном приложении комбинировать FMX и VCL

смотрите, в инете есть, в т.ч. на FMXexpress

 

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...