Delphi 如何访问监控摄像头?

hackergirl 2012-05-11 03:14:21
Delphi 如何访问监控摄像头?
这种摄像头和USB的不同,如果是USB的就很容易,用个第三方控就行了。
但这种DVR的有一个视频采集卡,不能用上述的第三方控访问。
有没有哪个控件可以问呢?
要实现的功能只要能预览摄像头的图像就行了。
...全文
830 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
天涯倦客 2012-05-15
  • 打赏
  • 举报
回复
sdk
另外看卡支持什么
支持 dx的 话可以直接用dx 来读。

卡拆下来可以看上面的芯片组 。
babydog01 2012-05-15
  • 打赏
  • 举报
回复
买之前要问问厂家是否能免费提供SDK开发接口,可先要来开发说明看下,能否满足你的功能要求.....
hackergirl 2012-05-15
  • 打赏
  • 举报
回复
只能用SDK了。谢谢各位。
hackergirl 2012-05-14
  • 打赏
  • 举报
回复
看来得先买回来看看怎样,再做吧.
SVIP_ 2012-05-12
  • 打赏
  • 举报
回复
他要的是安防的, 编码卡的, 看厂家而定.
程晨c 2012-05-12
  • 打赏
  • 举报
回复
视频采集卡提供接口函数,但这是访问采集卡及其处理的内存数据,而不是访问摄像头
贝隆 2012-05-11
  • 打赏
  • 举报
回复
mdejtod 2012-05-11
  • 打赏
  • 举报
回复
向厂方要SDK,最有效的办法
babydog01 2012-05-11
  • 打赏
  • 举报
回复
用采集卡时,属专用设备,每个厂家的都不一样。一般情况下,必须得有厂家提供三方控件。
shuihan20e 2012-05-11
  • 打赏
  • 举报
回复
要视频卡的SDK哦
NoMore 2012-05-11
  • 打赏
  • 举报
回复
具体步骤如下: 

  unit Unit1;

  interface

  uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, ComCtrls;

  type

  TForm1 = class(TForm)

  Panel1: TPanel;

  Button1: TButton;

  Button2: TButton;

   StatusBar1: TStatusBar;

   Button3: TButton;

   Button4: TButton;

   Button5: TButton;

  procedure Button1Click(Sender: TObject);

  procedure Button2Click(Sender: TObject);

  procedure FormClose(Sender: TObject; var Action: TCloseAction);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button5Click(Sender: TObject);

  private

  hWndC : THandle; //定义捕捉窗句柄

  public

  { Public declarations }

  end;

  var

  Form1: TForm1;

  

  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;

  const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63;

  const WM_CAP_SET_OVERLAY =WM_CAP_START+ 51;

  const WM_CAP_SET_PREVIEW =WM_CAP_START+ 50;

  const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6;

  const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2;

  const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3;

  const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;

  const WM_CAP_SET_SCALE=WM_CAP_START+ 53;

  const WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52;

  function capCreateCaptureWindowA(lpszWindowName : PCHAR;

  dwStyle : longint;x : integer;y : integer;nWidth : integer;

  nHeight : integer;ParentWin : HWND;nId : integer): HWND;

  STDCALL EXTERNAL 'AVICAP32.DLL';

  implementation

  {$R *.dfm}

  

  procedure TForm1.Button1Click(Sender: TObject);

  begin

  //使用Tpanel控件来创建捕捉窗口

  hWndC: =CapCreateCaptureWindowA ('My Own Capture Window' ,

  WS_CHILD or WS_VISIBLE, //窗口样式

  Panel1.Left,//X坐标

  Panel1.Top,//Y坐标

  panel1.Width, //窗口宽

  panel1.Height, //窗口高

  Form1.Handle, //窗口句柄

  0); //一般为0

  if hWndC <> 0 then

  begin

  SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);

  //捕捉一个视频流

  SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); //得到一个设备错误

  SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); //得到一个设备状态

  SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);

  //将一个捕捉窗口与一个设备驱动相关联

  SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);

  SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);

  SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);

  SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);

  end;

  end;

  procedure TForm1.Button2Click(Sender: TObject);

  begin

  if hWndC <> 0 then

   begin

  SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //将捕捉窗同驱动器断开

  hWndC := 0;

  end;

  close;

  end;

  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

  begin

  if hWndC <> 0 then

   begin

  SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //将捕捉窗同驱动器断开

  end;

  end;

  

  procedure TForm1.Button3Click(Sender: TObject);

  begin

   if hWndC <> 0 then

   begin

  SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,Longint(pchar(‘d:\\test.avi‘)));// 录成AVI

   SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);

   end;

  end;

  procedure TForm1.Button4Click(Sender: TObject);

  begin

   if hWndC <> 0 then

   begin

   SendMessage(hWndC, WM_CAP_STOP, 0, 0);

   end;

  end;

  procedure TForm1.Button5Click(Sender: TObject);

  begin

   if hWndC <> 0 then

   begin

   SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(‘D:\\test.bmp‘)));//截图

   end;

  end;

  end.
NoMore 2012-05-11
  • 打赏
  • 举报
回复
开发视频捕捉程序主要分以下四个步骤:

  (1) 创建一个AVICap类的捕捉窗口

  在进行视频捕捉之前必需要先创建一个“捕捉窗口”,并应以此为基础进行所有的捕捉及设置操作。“捕捉窗口”可用AVICap窗口类的“CapCreateCaptureWindow”函数来创建,其窗口风格可设置为WSCHILD和WS_VISIBLE参数,例如:

  hWndC: =CapCreateCaptureWindowA ('My Own Capture Window' ,

  WS_CHILD or WS_VISIBLE, //窗口样式

  Panel1.Left, //X坐标

  Panel1.Top, //Y坐标

  panel1.Width, //窗口宽

  panel1.Height, //窗口高

  Form1.Handle, //窗口句柄

  0); //一般为0

  “捕捉窗口”类似于一个标准组件,其主要功能为:

  1.将视频流和音频流数字化, 然后存储在硬盘或其他存储介质上,实现录象功能;

  2.动态的在一个捕获窗口与一个捕获设备之间连接或断接;

  3.以Overlay或Preview模式对输入的视频流进行实时显示; Overlay该模式为部分采集设备所具有的能力,可以通过CAPDRIVERVAPS结构中的fHasOverlay域来判断设备是否具备该模式。在Overlay模式下所捕获的视频数据的显示不需要占用系统资源,显示速度快,同时不影响系统的其他任务。该模式所支持的视频采集格式为YUV格式,通过capOverlay宏完成;在Preview模式下显示要占用CPU资源,视频砧由系统调用GDI函数在捕获窗口中显示。Previews模式显示速度慢,所支持的视频采集格式为RGB格式,通过capPreview宏实现。所以一般采用overlay模式显示的图像要比preview流畅;

  4.实现动态视频流截图,一帧一帧地获得视频数据。

  (2) 使捕捉窗口与其设备驱动程序相关联

  单独定义的捕捉窗是不能工作的,它须与一个设备相关联才能取得视频信号,通过如下代码就可以使捕捉窗口与其设备驱动程序相关联:

  SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);

  另外使用函数CapDriverConnect也可实现捕捉窗口与其设备驱动程序相关联。例如:

  CapDriver Connect (hWndC, 0);

  (3) 基本的捕获设置

  基本的捕获设置包括:设置捕获速度(每秒捕获多少帧),是否同时捕获声频,捕获缓冲,允许最大丢失多少帧,是否使用DOS内存,以及用键盘的哪个键或鼠标的哪个键来终止捕获等等。这些基本的设置都可以使用TcaptureParms结构来描述,你可以使用capCaptureGetSetup函数来得到当前的设置,然后改变此结构的成员变量,再使用capCaptureSetSetup函数设置新的设置,之后还可以用CapPreviewScale、CapPreviewRate设置预览的比例与速度,也可以直接使用设备的默认值。

  (4)打开预览

  利用函数CapOverlay可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。然后用CapPreview启动预览功能,这时就可以在屏幕上看到来自摄像机的图像了。

  通过以上四步就可以建立一个基本的视频捕捉程序,但假如想自己处理从设备捕捉到的视频数据,则要使用捕捉窗回调函数来处理,比如一帧一帧地获得视频数据或以流的方式获得视频数据等。
NoMore 2012-05-11
  • 打赏
  • 举报
回复
VFW主要由6个模块组成,下面做一下简单的说明:

AVICAP.DLL包含执行视频捕捉的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口。

MSVIDEO.DLL包含一套非凡的DrawDib函数,用来处理屏幕上的视频操作。

MCIAVI.DRV包括对VFW的MCI命令解释器的驱动程序。

AVIFILE.DLL包含由标准多媒体I/O(mmio)函数提供的更高的命令,用来访问.AVI文件。

ICM压缩治理器,用于治理的视频压缩/解压缩的编译码器(Codec)。

ACM音频压缩治理器,提供与ICM相似的服务,适用于波形音频。

1,185

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧