Topic: Прикрутить плеер на форму

Доброго дня!
Есть код плеера, сграбленного с вэб интерфейса камеры. Плеер в виде nvEncoderMedia.dll. Видимо, чтобы он отображался на форме, его нужно как-то прикрутить к ней, но не соображу как:

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
  NV1: Variant;
begin
  NV1:=CreateOleObject('NVCTRLMEDIA.Media.1');
  //TWinControl(NV1).Parent := Form1.Panel1;  // - ошибка invalid variant operation
  NV1.MediaURL := '192.168.1.100';
NV1.MediaUsername := 'admin';
NV1.MediaPassword := ' ';
NV1.HttpPort := '80';
NV1.DisplayTitleBar(0);
NV1.ID := 1 ;
NV1.SetCommunicationPort(6000,6001,6002,5000,6005,6006);
NV1.Connect();
NV1.Play();
end;

Re: Прикрутить плеер на форму

OLE-объекты нельзя рассматривать как WinControl.

Возможные варианты:

1. Плеер загнать в TWebBrowser, а сам TWebBrowser положить на форму.

2. Собрать в делфи в Ole-контейнере, запускать как Exe-шник, придумать управление (например через параметры запуска).

3. Заюзать через rtsp в VLС плеере (exe), SetParent-ом подтянуть к форме. Управление возможно http-командами.

Re: Прикрутить плеер на форму

vovka3003 wrote:

OLE-объекты нельзя рассматривать как WinControl.

Возможные варианты:

1. Плеер загнать в TWebBrowser, а сам TWebBrowser положить на форму.

2. Собрать в делфи в Ole-контейнере, запускать как Exe-шник, придумать управление (например через параметры запуска).

3. Заюзать через rtsp в VLС плеере (exe), SetParent-ом подтянуть к форме. Управление возможно http-командами.

Да пробовал уже варианты, первые 2 работают, для 3-го нужно знать rtsp поток, а я, к сожалению, не смог его вычислить.
Но хотелось по красоте сделать...

Re: Прикрутить плеер на форму

vovka3003 wrote:

1. Плеер загнать в TWebBrowser, а сам TWebBrowser положить на форму.

Примерный html-код:

<body leftmargin=0 topmargin=0 rightmargin=0 bottommargin=0>

<OBJECT  id="NV1" style="width:100%;height:100%; " classid="clsid:62D6556A-808B-4322-A76F-B5DFF38D3DC5"></OBJECT>

<script>
    NV1.MediaURL = '192.168.1.100';
    // ... другие настройки
    NV1.Connect();
    if (!NV1.Play()){
        alert('Ошибка соединения!');
    };
</script>
    
</body>

https://i.imgur.com/tKr56lL.png

Re: Прикрутить плеер на форму

newusr wrote:

Но хотелось по красоте сделать...

"Красоты" не будет без контейнера ActiveX.

newusr wrote:

для 3-го нужно знать rtsp поток, а я, к сожалению, не смог его вычислить.

Если есть Onvif, то ODM что-то должен показать.

Re: Прикрутить плеер на форму

Я правильно понял, что для каждой камеры нужно создать html файл и открыть их через TWebBrowser на форме?

Re: Прикрутить плеер на форму

vovka3003 wrote:

Если есть Onvif, то ODM что-то должен показать.

Нет, к сожалению, Onvif.

Re: Прикрутить плеер на форму

Ну, может производителю задать вопрос?

Re: Прикрутить плеер на форму

newusr wrote:

Я правильно понял, что для каждой камеры нужно создать html файл и открыть их через TWebBrowser на форме?

Ну, это уже зависит от возможностей контрола, я с ним не работал, не в курсе. Думаю, как минимум можно сделать сетку div-ов и засунуть в нее отдельно плееры. Делать страницу в виде файла - необязательно, достаточно записать код в TWebBrowser.
Ну и сам установщик контрола с собой таскать для компьютеров, где его нет.

Re: Прикрутить плеер на форму

vovka3003 wrote:

Ну, может производителю задать вопрос?

С ними особо не пообщаешься, производитель ACTI. Кодек старинный SED2140.
На все запросы отвечают стандартно: оборудование снято с производства, приобретайте новое...

Re: Прикрутить плеер на форму

vovka3003 wrote:

Делать страницу в виде файла - необязательно, достаточно записать код в TWebBrowser.
Ну и сам установщик контрола с собой таскать для компьютеров, где его нет.

А как в него записать, есть пример какой-нибудь?

Re: Прикрутить плеер на форму

newusr wrote:

А как в него записать, есть пример какой-нибудь?

Ну, попробовал - не работает ни один из адекватных способов (data/url, Document.Write).
Бесполезный огрызок браузера, короче...

Re: Прикрутить плеер на форму

Ясно, спасибо.

Re: Прикрутить плеер на форму

Вариант - сделать "базовую страницу" и через Navigate в нее передавать содержимое для записи на странице.

15 (edited by vovka3003 2023-09-29 14:11:50)

Re: Прикрутить плеер на форму

Так работает вроде:

const
    text =  '<span style="color:red"><b>123459</b></span>';
    script = '<script>alert("Привет мир!");</script>';



var WB:TWebBrowser;
begin
  WB:=TWebBrowser.Create(Application);
 // WB.Silent := 1;
  TWinControl(WB).Parent := Form1;
  WB.Align := alClient;
  WB.Navigate('about:blank');
  WB.Navigate('javascript:document.body.innerHTML='''+text+script+''';');
end.

Re: Прикрутить плеер на форму

Спасибо за пример, возьму в арсенал.