|
Вопрос # 2 018/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Вопрос такой! Хочу написать видео чат для локальной сети. Каким образом получить список видеоустройств, установленных в системе? Чтобы пользователь мог выбрать, чем ему воспользоваться в данный момент. Ну например вместо вебкамеры запустить видеопоток с ТВтюнера в канал.
 |
Вопрос задал: Nasgool (статус: 2-ой класс)
Вопрос отправлен: 24 октября 2008, 03:22
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Nasgool!
Я нашел пример "Как получить картинку с видео источника". Он в приложении. Возможно он вас наталкнет на путь истенный. :-)
А так же советую ознакомится вот с этими статьями:
1. Получение и установка видеорежимов в Windows;
2. Работа с устройствами в Windows;
3. Интерфейсы DirectDraw и DirectDraw2;
4. Первые шаги с DirectShow. Шаг 5. DSPack (Delphi).
И собственно сам DSPack - компонент-обертка над DirectShow.
P.S. Желаю удачи.
Приложение: Переключить в обычный режим-
-
-
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Panel1: TPanel;
- OpenVideo: TButton;
- CloseVideo: TButton;
- GrabFrame: TButton;
- SaveBMP: TButton;
- StartAVI: TButton;
- StopAVI: TButton;
- SaveDialog1: TSaveDialog;
- procedure FormCreate(Sender: TObject);
- procedure OpenVideoClick(Sender: TObject);
- procedure CloseVideoClick(Sender: TObject);
- procedure GrabFrameClick(Sender: TObject);
- procedure SaveBMPClick(Sender: TObject);
- procedure StartAVIClick(Sender: TObject);
- procedure StopAVIClick(Sender: TObject);
- private
- { Private declarations }
- hWndC : THandle;
- CapturingAVI : bool;
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- const WM_CAP_START = WM_USER;
- const WM_CAP_STOP = WM_CAP_START + 68;
- const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
- const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
- const WM_CAP_SAVEDIB = WM_CAP_START + 25;
- const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
- const WM_CAP_SEQUENCE = WM_CAP_START + 62;
- const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
-
- function capCreateCaptureWindowA(lpszWindowName : PCHAR;
- dwStyle : longint;
- x : integer;
- y : integer;
- nWidth : integer;
- nHeight : integer;
- ParentWin : HWND;
- nId : integer): HWND;
- STDCALL EXTERNAL 'AVICAP32.DLL';
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- CapturingAVI := false;
- hWndC := 0;
- SaveDialog1.Options :=
- [ofHideReadOnly, ofNoChangeDir, ofPathMustExist]
- end;
-
- procedure TForm1.OpenVideoClick(Sender: TObject);
- begin
- hWndC := capCreateCaptureWindowA('My Own Capture Window',
- WS_CHILD or WS_VISIBLE ,
- Panel1.Left,
- Panel1.Top,
- Panel1.Width,
- Panel1.Height,
- Form1.Handle,
- 0);
- if hWndC <> 0 then
- SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
- end;
-
- procedure TForm1.CloseVideoClick(Sender: TObject);
- begin
- if hWndC <> 0 then begin
- SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
- hWndC := 0;
- end;
- end;
-
- procedure TForm1.GrabFrameClick(Sender: TObject);
- begin
- if hWndC <> 0 then
- SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);
- end;
-
- procedure TForm1.SaveBMPClick(Sender: TObject);
- begin
- if hWndC <> 0 then begin
- SaveDialog1.DefaultExt := 'bmp';
- SaveDialog1.Filter := 'Bitmap files (*.bmp)|*.bmp';
- if SaveDialog1.Execute then
- SendMessage(hWndC,
- WM_CAP_SAVEDIB,
- 0,
- longint(pchar(SaveDialog1.FileName)));
- end;
- end;
-
- procedure TForm1.StartAVIClick(Sender: TObject);
- begin
- if hWndC <> 0 then begin
- SaveDialog1.DefaultExt := 'avi';
- SaveDialog1.Filter := 'AVI files (*.avi)|*.avi';
- if SaveDialog1.Execute then begin
- CapturingAVI := true;
- SendMessage(hWndC,
- WM_CAP_FILE_SET_CAPTURE_FILEA,
- 0,
- Longint(pchar(SaveDialog1.FileName)));
- SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
- end;
- end;
- end;
-
- procedure TForm1.StopAVIClick(Sender: TObject);
- begin
- if hWndC <> 0 then begin
- SendMessage(hWndC, WM_CAP_STOP, 0, 0);
- CapturingAVI := false;
- end;
- end;
-
- end.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 24 октября 2008, 13:11
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|