1 (edited by sibprogsistem 2021-06-22 06:43:57)

Topic: стороннее приложение в форме

помню, что на форуме обсуждалась подобная тема, но не могу ее найти.

 
как вывести в форме MVD сторонний exe ?

Re: стороннее приложение в форме

"Сторонний exe" вывести в форме нельзя. Можно вывести окно с помощью FindFindow и SetParent.

3 (edited by newusr 2021-08-20 06:35:55)

Re: стороннее приложение в форме

vovka3003 wrote:

"Сторонний exe" вывести в форме нельзя. Можно вывести окно с помощью FindFindow и SetParent.

Доброго всем дня.
Пытаюсь прикрепить к панели формы "стороннее приложение", используя скрипт:

      h := 0;
      Max := 20;
      Repeat
          Sleep(100);
          h := FindWindow('', 'ip_player'); // поиск окна стороннего приложения
          Dec(Max);
      until (h <> 0) or (Max = 0);

      // перемещение плеера в форму
      if h <> 0 then
      begin
          SetParent(h, main.Panel1.Handle);  // прикрепляю к форме
          SetWindowPos( h, 0, -8, -29, 821, 645, 0); // set position x=10, y=10  SWP_NOSIZE
          Application.ProcessMessages;
         showmessage('прикрепил'+inttostr(h));   // тестовое сообщение для проверки
      end else showmessage('плеер не найден');

Не на всех компьютерах происходит прикрепление окна приложения к форме с первого раза, хотя скрипт окно находит, так как сообщение 'прикрепил'+хэндл выводится. Если скрипт выполнить повторно, окно к панели формы прикрепляется. Что не так с кодом?

PS: не смог встроенной функцией медиаплеера вывести RSTP поток с IP камеры, поэтому пришлось написать на Delphi приложение - плеер, может кто подскажет, можно ли встроенными функциями MVD вывести поток?

4 (edited by vovka3003 2021-08-20 18:35:15)

Re: стороннее приложение в форме

newusr wrote:

.. не смог..

А магар за готовое работающее решение..? wink

Re: стороннее приложение в форме

vovka3003 wrote:

А магар за готовое работающее решение..? wink

"Готовое решение" очень похоже на работу VLC плеера...
А о каком магаре идёт речь?

Re: стороннее приложение в форме

Да, это vlc. Но саркастические кавычки - есть не сам плеер, а его связка с mvdb.

newusr wrote:

о каком магаре идёт речь?

т.н. "от души", учитывая то, что из спортивного интереса потратил где-то пару дней на поиск и реализацию способов привязки/управления. Т.к. в проге не очень широкие возможности - остались некоторые пробелы, но в целом решение получилось рабочее.

Re: стороннее приложение в форме

Использование VLC было первым моим вариантом решения задачи, это тот же костыль, но тяжёлый и капризный (то в трей свернётся, то зависнет), мой же костылёк лёгкий и рабочий, не требует установки на комп клиента (как VLC) и упаковывается вместе с программой.
Что касается первой части моего вопроса, то я в скрипте повторяю 2 раза строчки прикрепления окна, чтобы уж наверняка прикрепить к панели.
Пробовал воспроизвести поток встроенным плеером (кто-то на форуме утверждал, что работает, у меня - нет), вот это было бы "магаровым" решением.

8 (edited by vovka3003 2021-08-31 14:28:59)

Re: стороннее приложение в форме

newusr wrote:

VLC .. это тот же костыль, но тяжёлый и капризный (то в трей свернётся, то зависнет)

Отнюдь... Не замечал такого (покрайней мере - последние 5 лет точно).

newusr wrote:

я в скрипте повторяю 2 раза строчки прикрепления окна, чтобы уж наверняка прикрепить к панели.

Я отрабатываю немного больше строчек для отработки ресайза родителя.

newusr wrote:

(кто-то на форуме утверждал, что работает, у меня - нет),

Ну rtsp и rtmp - это несколько разные протоколы...

newusr wrote:

встроенным плеером

"встроенный плеер" - не что иное как заимствованный из системы Windows Media Player. Строить запустить прогу на компе где он вырезан или криво стоит - получите сообщение "вызов недопустимого класса" или висяк с вылетом.

newusr wrote:

встроенным плеером.. ..вот это было бы "магаровым" решением.

Это будет возможно если:

1. Поймать [сторонним] кодером rtsp-стрим.
2. Преобразовать на лету во временные файлы или ретранслировать на какой-то http-сервер.
3. Воспроизвести получившееся [это] "встроеным плеером".
4. Жать ручками "play" каждый раз, когда поток прервется...
5. Тормозить своевременно сервер-декодер, когда он не нужен (чтобы переставал писать временные файлы и насиловать проц).

Бр-р-р-р... Жесть. Врагу даже не предложу такое г-но...


---
Короч, что у меня вышло:

1. Плеер полностью отвязан от системы (портабельный лаунчер выкинут, команды запуска прописаны непосредственно в скрипте) и без каких-либо проблем и танцев с бубном развернется там, где его запустишь.
2. Встраивается в окно (аналогично, парой виндовых функций + таскается за якорями).
3. Изучил http-api плеера и добавил функции для управления плеером из скрипта (плей, стоп, пауза, перемотка и т.п.).
4. Все настройки выставлены для "встраивания" (в том числе - убраны иконки в трее и панели задач).
5. Кущает все (ну, это ж VLC..). Отмечу: если разорвать и восстановить коннект - автоматом переподключается к текущему url-у.

Что не вышло (из-за того, что нет нужных виндовых функций в стоке mvdb и нет возможности их импорта из системных dll).:

1. Отключить контекстное меню (не критично в принципе).
2. Отключить хоткеи (тоже не критично, и даже в чем-то полезно).
3. Запретить нежелательный фулскрин - критично, но, можно его глушить костылем-таймером, проверяя размеры и меняя Parent исходя из условий.

Re: стороннее приложение в форме

vovka3003 wrote:

Не замечал такого (покрайней мере - последние 5 лет точно).

Я приложение делал в 2018г, может с обновлениями VLC таких уже глюков нет. Отдельно VLC работал замечательно, а в связке с MVDB начинались проблемы.

"встроенный плеер" - не что иное как заимствованный из системы Windows Media Player.

Да понятно, что проблема не в MVDB, я таки не смог заставить сам WMP показывать rtsp поток, какие бы кодеки и плагины не ставил.
Поэтому нашёл подходящий пример на Delphi (я совсем не программист), адаптировал под свои задачи и скомпилировал. Кстати там используется библиотека libvlc, то есть получился как бы vlc плеер.
Вообще было бы интересно посмотреть Ваше решение, может пригодится для будущих проектов. Можем обсудить в личке.

Re: стороннее приложение в форме

newusr wrote:

..Кстати там используется библиотека libvlc..

Я почему-то был в этом уверен...))