![]() |
|
#1
|
||||
|
||||
![]() Hi! Извиняюсь если тема такая есть, но я не нашел ее.
Нарисовалась у меня проблема, получаю видео поток с веб-камеры используя DSPack (рабочий пример ниже), а как послать по сети ума не прилажу. Находил в Инете примеры по данной теме, но там по сети посылались изображения и накладывались друг на друга у получателя, что не очень то хорошо, т.к. при большом числе картинок изображение начинало мерцать. Подскажите, кто сталкивался с этим, как посылать сам видео поток по сети? Заранее спасиб. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DSPack, DSUtil, DirectShow9; type TForm1 = class(TForm) SampleGrabber1: TSampleGrabber; ComboBox1: TComboBox; Button1: TButton; FilterGraph1: TFilterGraph; Filter1: TFilter; VideoWindow1: TVideoWindow; procedure FormCreate(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; VideoDevice: TSysDevEnum; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin VideoDevice:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory); if VideoDevice.CountFilters > 0 then for i := 0 to VideoDevice.CountFilters - 1 do ComboBox1.Items.Add(VideoDevice.Filters[i].FriendlyName); end; procedure TForm1.ComboBox1Change(Sender: TObject); begin FilterGraph1.ClearGraph; FilterGraph1.Active := false; Filter1.BaseFilter.Moniker :=VideoDevice.GetMoniker(ComboBox1.ItemIndex); FilterGraph1.Active := true; with (FilterGraph1 as ICaptureGraphBuilder2) do RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter1 as IBaseFilter, SampleGrabber1 as IBaseFilter, VideoWindow1 as IbaseFilter); FilterGraph1.Play; end; procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption='Смотреть видео' then begin FilterGraph1.Play; Button1.Caption:='Остановить видео'; end else begin FilterGraph1.Stop; Button1.Caption:='Смотреть видео'; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin VideoDevice.Destroy; end; end. |