当前位置:主页>仓库管理软件> 列表

德加拉AVE2000型号的视屏压缩卡数据流的采集

记账软件版1楼: 各位高手,小弟有一块德加拉AVE2000型号的视屏压缩卡,要对其进行二次开发就是视频采集的开发谁有经验?

2楼: 小弟比较着急,请各位大虾帮帮忙。分不够还可以再加。 如出纳记账软件

3楼: 我做过医院B超视频,只是你要得到采集卡的开发包SDK,DLL等.用系统的函数,有时不稳定.

4楼: to list000
图像清晰吗?你用的是什么牌子的压缩卡,用什么语言开发的?现在使用的效果怎样?

5楼: 品尼高,双敏.效果不错.可以截图.也可以视频采集.

6楼: delphi语言

记账软件版7楼: 开发过AVE6000的
它不是带了SDK吗

8楼: to jingtao
我有一个AVE6000的简单程序,可是套用以后无法打开图像卡的通道。不知为什么?

9楼: 不会的.
unit Unit_FrmMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

const
FIRSTCARD=1;
NCARD=33;
LISTENPORT=4000;

WM_TKLSDK_DATA=WM_USER+$100;
WM_CLIENTMSG=WM_USER+$200;
WM_NETMSG=WM_USER+$201;


type
TFrmMain = class(TForm)
Panel1: TPanel;
BtnStart: TButton;
BtnStop: TButton;
Edit_FirstCard: TEdit;
Edit_CardNum: TEdit;
procedure FormCreate(Sender: TObject);
procedure BtnStartClick(Sender: TObject);
procedure BtnStopClick(Sender: TObject);
private
{ Private declarations }
m_TransMode:integer;
m_RealCardNum:integer;
m_nCardType:array[0..FIRSTCARD+NCARD-1] of integer;
//bool m_PreviewFlag, m_Saving;

procedure OnDataReady(var Msg:TMessage);message WM_TKLSDK_DATA;
procedure OnClientMsg(var Msg:TMessage);message WM_CLIENTMSG;
procedure OnNetMsg(var Msg:TMessage);message WM_NETMSG;
public
{ Public declarations }
end;

var
FrmMain: TFrmMain;
m_lHandle:array[0..FIRSTCARD+NCARD-1]of Longint;
implementation
uses
ServerTrans_Dll,TklSdkAll_Dll;

{$R *.dfm}
function ConnectCheckCallBack(username:Pchar;password:Pchar;IP:Pchar;nChannel:integer):Bool;stdcall;


var
VideoHead:array[0..2324-1]of Byte;
nBufLen:Longint;
begin
nBufLen:=2324;

TKLSDK_GetFileHeader(m_lHandle[nChannel], @VideoHead, Nil, @nBufLen);
TKLNETSERVER_SetVideoHead(m_lHandle[nChannel], nChannel, Pchar(@VideoHead), nBufLen);

TKLSDK_InsertKeyFrame(nChannel);
//Showmessage(IP);
//MessageBox(0,'''','''',0);
Result:=True;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
m_RealCardNum:=0;
m_TransMode:=Ord(tcp);
end;

procedure TFrmMain.OnClientMsg(var Msg: TMessage);
var
length:integer;
buf:array[0..99]of char;
strIP:array[0..19] of char;
StrTemp:string;
intTemp:integer;
begin

TKLNETSERVER_GetClientMessage(Msg.wParam, Msg.wParam, @buf, length, strIP);
//buf[length]:=#0;
//StrTemp:='''';
//for intTemp:=0 to Pred(length) do StrTemp:=StrTemp+buf[intTemp];
//Showmessage(StrIp);
Showmessage(buf);
//OutputDebugString(strIP);
//OutputDebugString(buf);

//sprintf(buf, "Message No.%d From Server To %s\n", count++, strIP);

TKLNETSERVER_GetClientMessage(Msg.wParam, Msg.wParam, @buf, strlen(buf), Pchar(''''));

end;

procedure TFrmMain.OnDataReady(var Msg: TMessage);
var
lHandle,nFrameType:integer;
pBuf:array[0..200*1024-1] of Byte;
nBufLen:Longint;
begin
lHandle:=Msg.lParam shr 16;
nBufLen:=200*1024;
//static int Count=0;

while(TKLSDK_GetData(lHandle,@pBuf,Nil,@nBufLen)) do
begin
case TKLSDK_CHANNEL_TYPE(m_nCardType[lHandle]) of
AVE1000,
AVE2000,
AVE3000,
AVE5000:
TKLNETSERVER_SendDatatoSer(lHandle, lHandle, Pchar(pBuf[0]), nBufLen, FRAME_TYPE(FRAME_TYPE_I));
AVE4000,
AVE6000,
AVE7000,
AVE8000,
AVE9000:
begin
TKLSDK_CheckFrameType(lHandle, @pBuf, @nBufLen, @nFrameType);

//if (m_Saving)
// fwrite(pBuf, nBufLen, 1, m_fp[lHandle-m_FirstCard]);

case TKLSDK_FRAME_TYPE(nFrameType) of

TKLSDK_FRAME_TYPE_I:
TKLNETSERVER_SendDatatoSer(lHandle, lHandle, Pchar(@pBuf), nBufLen, FRAME_TYPE_I);
TKLSDK_FRAME_TYPE_P:
TKLNETSERVER_SendDatatoSer(lHandle, lHandle, Pchar(@pBuf), nBufLen, FRAME_TYPE_P);
TKLSDK_FRAME_TYPE_B:
TKLNETSERVER_SendDatatoSer(lHandle, lHandle, Pchar(@pBuf), nBufLen, FRAME_TYPE_B);
TKLSDK_FRAME_UNKNOWN:
TKLNETSERVER_SendDatatoSer(lHandle, lHandle, Pchar(@pBuf), nBufLen, FRAME_UNKNOWN);
end;
end;
end;

end;

nBufLen:=204800;
end;


procedure TFrmMain.BtnStartClick(Sender: TObject);
var
i,CardType:integer;
m_FirstCard,m_CardNum:integer;
begin
//There are Opened Channels
if (m_RealCardNum>0) then Exit;

//Retrieve the First Channel Id and Total Channel Number
m_FirstCard:=StrToIntDef(Edit_FirstCard.Text,1);
m_CardNum:=StrToIntDef(Edit_CardNum.Text,4);

//Initiate the Card
for i:=m_FirstCard to Pred(m_FirstCard+m_CardNum) do
begin
m_nCardType[i]:=Ord(AVEDEFAULT);
m_lHandle[i]:=0;
if(TKLSDK_OpenChannel(i, @m_nCardType[i], @m_lHandle[i])) then
begin
if (m_lHandle[i] = 0 ) then break;
end
else
break;
end;

//Calculate the Number of Actually Opened Channel
if (i else m_RealCardNum:=m_CardNum;

if (m_RealCardNum=0) then Exit;


//Register the Message of DataReady
//for (i=m_FirstCard;ifor i:=m_FirstCard to Pred(m_FirstCard+m_RealCardNum) do
begin
//TKLSDK_SetOSD(m_lHandle[i],TKLSDK_OSD_YY_MM_DD|TKLSDK_OSD_LEFT|TKLSDK_OSD_TOP,''/'',NULL,NULL,true);
TKLSDK_RegisterDataRcvWindow(m_lHandle[i], Handle, WM_TKLSDK_DATA);
end;

//Initiate NetTrans
TKLNETSERVER_Init(LISTENPORT);
//Set Transport Mode
TKLNETSERVER_SetSendMode(NetMode(ord(m_TransMode)), '''', 8000, 7000);{强烈注意这里.TMD.TKLNETSERVER_SetSendMode(NetMode[m_TransMode], '''', 8000, 7000);失败}

//Set Callback Function of Client Check
TKLNETSERVER_ClientCheck(@ConnectCheckCallBack, Nil);
//Start Compress and Net Transport
//for (i=m_FirstCard;ifor i:=m_FirstCard to Pred(m_FirstCard+m_RealCardNum) do
begin
TKLSDK_StartCompress(m_lHandle[i]);

case TKLSDK_CHANNEL_TYPE(m_nCardType[i]) of
AVEDEFAULT:CardType:=0;
AVE1000:CardType:=1000;
AVE2000:CardType:=2000;
AVE3000:CardType:=3000;
AVE4000:CardType:=4000;
AVE5000:CardType:=5000;
AVE6000:CardType:=6000;
AVE7000:CardType:=7000;
AVE8000:CardType:=8000;
AVE9000:CardType:=9000;
else CardType:=0;
end;
TKLNETSERVER_Start(m_lHandle[i], i, CardType);
TKLNETSERVER_SetMessageNotify(m_lHandle[i], Handle, WM_CLIENTMSG, NULL);
TKLNETSERVER_SetErrorNotify(m_lHandle[i], Handle, WM_NETMSG, NULL);

end;

//GetDlgItem(IDC_Start)->EnableWindow(FALSE);


//GetDlgItem(IDC_Stop)->EnableWindow(TRUE);
//GetDlgItem(IDC_PREVIEW)->EnableWindow(TRUE);
//GetDlgItem(IDC_SAVE)->EnableWindow(TRUE);
end;

procedure TFrmMain.BtnStopClick(Sender: TObject);
var
i:integer;
m_FirstCard,m_CardNum:integer;
begin
m_FirstCard:=StrToIntDef(Edit_FirstCard.Text,1);
m_CardNum:=StrToIntDef(Edit_CardNum.Text,4);

//Check whether There are Opened Channels
if (m_RealCardNum=0) then Exit;

//Stop Previewing
//if (m_PreviewFlag) then OnPreview();
//Stop Saving
//if (m_Saving) then OnSave();

//Close Compress and Net Transport
//for (i=m_FirstCard;ifor i:= m_FirstCard to Pred(m_FirstCard+m_RealCardNum)do
begin
TKLSDK_StopCompress(m_lHandle[i]);
TKLSDK_CloseChannel(m_lHandle[i]);
TKLNETSERVER_Stop(m_lHandle[i], i);
end;

TKLNETSERVER_CleanUp();

m_RealCardNum:=0;

end;

procedure TFrmMain.OnNetMsg(var Msg: TMessage);
var
Error,Channel:integer;
buf:string;
begin
{
应用程序收到的错误通知消息的
wParam的低16位是通道号,
wParam的高16位是错误号,
lParam是对应的网络字节序的客户端IP地址。
}
Channel:=Msg.wParam and $ff;
Error:=Msg.wParam shr 16;

if (Error=SERVER_OK) then
buf:=Format(''Player %d to Channel %d is Connected'',[Msg.lParam, Channel])
else
buf:=Format(''Player %d to Channel %d met Unknown Error'',[Msg.lParam, Channel]);

Showmessage(buf);

end;

end.