Как отобразить видео за другими компонентами?

Я создаю программное обеспечение в Delphi 10.2 Tokyo, используя FMX. Я хочу показать видео в фоновом режиме за всеми компонентами, используя TMediaPlayerControl. Я отправляю TMediaPlayerControl на задний план и играю видео, но видео не воспроизводится за компонентами, а воспроизводится поверх них.

Я поставил TMemo в клиентской области и TMediaPlayerControl за ней. Что он должен делать, так это воспроизводить видео за TMemo, но вместо этого оно воспроизводится поверх TMemo.

Как воспроизвести видео в фоновом режиме за TMemo?


person Abhishek    schedule 21.08.2017    source источник
comment
Это мне непонятно. Возможно, вы могли бы предоставить минимально воспроизводимый пример.   -  person David Heffernan    schedule 21.08.2017
comment
Скорее всего, медиаплеер использует технологию, выводящую видео прямо на экран, а не в окно. Это объясняет, почему он появляется поверх всего.   -  person Remy Lebeau    schedule 21.08.2017
comment
Я видел использование TMediaPlayerControl в фоновом режиме, затем TEdit и TButton и TPanel поверх. Я не помню, но я видел использование в приложении.   -  person Abhishek    schedule 21.08.2017
comment
@Abhishek, ты уверен, что это было конкретно TMediaPlayerControl или просто видео в целом? Это имеет значение   -  person Remy Lebeau    schedule 21.08.2017
comment
Реализация TMediaPlayerControl для большинства ОС (вероятнее всего, для всех) использует собственные элементы управления для отображения видео, и для него нет управления Z-порядком, поэтому они будут отображаться поверх всего остального. Почему вы хотите, чтобы заметка появлялась поверх фактического видео, мне не понятно, поскольку это затемнило бы изображение; Я бы поставил на одну сторону.   -  person Dave Nottage    schedule 22.08.2017
comment
@Remy Lebeuu Я не уверен насчет TMediaPlayerControl. Это может быть другое, чего я не знаю. Дэйв Ноттэдж: видео отлично смотрится за TMemo, если вы используете книгу стилей Jet. Я могу сделать это сбоку, но на заднем плане это будет выглядеть более привлекательно.   -  person Abhishek    schedule 22.08.2017


Ответы (3)


Если вы хотите сделать это, вам понадобится видеоплеер, который может отображать непосредственно на поверхности openGL (т.е. фактически отображать в форме delphi). Насколько я знаю, только один видеоплеер может это сделать, это TalVideoPlayer, реализованный в alcinoe (https://sourceforge.net/projects/alcinoe/). Текущая реализация предназначена только для ios/android, но реализация шва для Windows довольно проста, а версия для macos довольно тривиальна, поскольку она использует тот же API, что и ios.

person andrey    schedule 26.08.2017
comment
За три года, прошедшие после этой публикации, стал ли доступен готовый к работе с Windows видеопроигрыватель, отображающий непосредственно в форму Delphi? Вариант использования для меня — добавление слоев для анимации. - person Shiffles; 03.05.2021

Вы можете использовать libvlc для рендеринга непосредственно в форму или во что угодно. Вызовите libvlc_media_player_set_display_window(), чтобы установить дескриптор окна, в котором медиаплеер должен отображать свой видеовыход. Таким образом, вы можете показывать видео в фоновом режиме за всеми компонентами.

person fpp    schedule 29.05.2021

Я использую классы-оболочки и компоненты из http://prog.olsztyn.pl/paslibvlc очень просто верно

Проверено в FMX Delphi 10.4.2 - работает нормально (libVLC 3.014 - последняя версия)

person Stanislav Kaskevich    schedule 02.06.2021