Topic: стороннее приложение в форме
помню, что на форуме обсуждалась подобная тема, но не могу ее найти.
как вывести в форме MVD сторонний exe ?
My Visual Database → Russian → стороннее приложение в форме
помню, что на форуме обсуждалась подобная тема, но не могу ее найти.
как вывести в форме MVD сторонний exe ?
"Сторонний exe" вывести в форме нельзя. Можно вывести окно с помощью FindFindow и SetParent.
"Сторонний 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 вывести поток?
А магар за готовое работающее решение..?
"Готовое решение" очень похоже на работу VLC плеера...
А о каком магаре идёт речь?
Да, это vlc. Но саркастические кавычки - есть не сам плеер, а его связка с mvdb.
о каком магаре идёт речь?
т.н. "от души", учитывая то, что из спортивного интереса потратил где-то пару дней на поиск и реализацию способов привязки/управления. Т.к. в проге не очень широкие возможности - остались некоторые пробелы, но в целом решение получилось рабочее.
Использование VLC было первым моим вариантом решения задачи, это тот же костыль, но тяжёлый и капризный (то в трей свернётся, то зависнет), мой же костылёк лёгкий и рабочий, не требует установки на комп клиента (как VLC) и упаковывается вместе с программой.
Что касается первой части моего вопроса, то я в скрипте повторяю 2 раза строчки прикрепления окна, чтобы уж наверняка прикрепить к панели.
Пробовал воспроизвести поток встроенным плеером (кто-то на форуме утверждал, что работает, у меня - нет), вот это было бы "магаровым" решением.
VLC .. это тот же костыль, но тяжёлый и капризный (то в трей свернётся, то зависнет)
Отнюдь... Не замечал такого (покрайней мере - последние 5 лет точно).
я в скрипте повторяю 2 раза строчки прикрепления окна, чтобы уж наверняка прикрепить к панели.
Я отрабатываю немного больше строчек для отработки ресайза родителя.
(кто-то на форуме утверждал, что работает, у меня - нет),
Ну rtsp и rtmp - это несколько разные протоколы...
встроенным плеером
"встроенный плеер" - не что иное как заимствованный из системы Windows Media Player. Строить запустить прогу на компе где он вырезан или криво стоит - получите сообщение "вызов недопустимого класса" или висяк с вылетом.
встроенным плеером.. ..вот это было бы "магаровым" решением.
Это будет возможно если:
1. Поймать [сторонним] кодером rtsp-стрим.
2. Преобразовать на лету во временные файлы или ретранслировать на какой-то http-сервер.
3. Воспроизвести получившееся [это] "встроеным плеером".
4. Жать ручками "play" каждый раз, когда поток прервется...
5. Тормозить своевременно сервер-декодер, когда он не нужен (чтобы переставал писать временные файлы и насиловать проц).
Бр-р-р-р... Жесть. Врагу даже не предложу такое г-но...
---
Короч, что у меня вышло:
1. Плеер полностью отвязан от системы (портабельный лаунчер выкинут, команды запуска прописаны непосредственно в скрипте) и без каких-либо проблем и танцев с бубном развернется там, где его запустишь.
2. Встраивается в окно (аналогично, парой виндовых функций + таскается за якорями).
3. Изучил http-api плеера и добавил функции для управления плеером из скрипта (плей, стоп, пауза, перемотка и т.п.).
4. Все настройки выставлены для "встраивания" (в том числе - убраны иконки в трее и панели задач).
5. Кущает все (ну, это ж VLC..). Отмечу: если разорвать и восстановить коннект - автоматом переподключается к текущему url-у.
Что не вышло (из-за того, что нет нужных виндовых функций в стоке mvdb и нет возможности их импорта из системных dll).:
1. Отключить контекстное меню (не критично в принципе).
2. Отключить хоткеи (тоже не критично, и даже в чем-то полезно).
3. Запретить нежелательный фулскрин - критично, но, можно его глушить костылем-таймером, проверяя размеры и меняя Parent исходя из условий.
Не замечал такого (покрайней мере - последние 5 лет точно).
Я приложение делал в 2018г, может с обновлениями VLC таких уже глюков нет. Отдельно VLC работал замечательно, а в связке с MVDB начинались проблемы.
"встроенный плеер" - не что иное как заимствованный из системы Windows Media Player.
Да понятно, что проблема не в MVDB, я таки не смог заставить сам WMP показывать rtsp поток, какие бы кодеки и плагины не ставил.
Поэтому нашёл подходящий пример на Delphi (я совсем не программист), адаптировал под свои задачи и скомпилировал. Кстати там используется библиотека libvlc, то есть получился как бы vlc плеер.
Вообще было бы интересно посмотреть Ваше решение, может пригодится для будущих проектов. Можем обсудить в личке.
..Кстати там используется библиотека libvlc..
Я почему-то был в этом уверен...))
My Visual Database → Russian → стороннее приложение в форме
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi