海康硬盘录像机,用delphi做实时监控,觉得已经登录上,为什么播放不出来,哪里有不对的地方,求大神指导

houjiuhong 2015-03-24 08:12:04
var MyNode,ChildNode:TTreeNode;
i:Byte;
P:Pbyte;
addform:Tform2;
m_hWnd:integer;
begin

Btn_Play_Wnd.Caption := 'Play!';

deviceIP := PAnsiChar(AnsiString(form1.Edit_IP.Text));
devicePort := StrtoInt(form1.Edit_Port.Text);
userName := PAnsiChar(AnsiString(form1.Edit_User.Text));
passWord := PAnsiChar(AnsiString(form1.Edit_Password.Text));


//登录设备
lUserID := NET_DVR_Login_V30(deviceIP, devicePort, userName, passWord, @struDeviceInfo);
if lUserID < 0 then
begin
dwRet := NET_DVR_GetLastError();
Showmessage('登录设备失败,错误号为'+ IntToStr(dwRet));
Exit;
end;

struPlayInfo.lChannel := StrtoInt(form1.Edit_ch_no.Text); //通道号
struPlayInfo.lLinkMode := 0; //最高位为1表示子码流,其他位值:0-TCP方式,1-UDP方式,2-多播方式
struPlayInfo.sMultiCastIP := '234.5.6.7'; //多播组地址
struPlayInfo.hPlayWnd := Panel1.Handle; //预览窗口
//struPlayInfo.hPlayWnd := 0;//不解码只取流

//开始预览
//lRealHandle := NET_DVR_RealPlay_V30(lUserID, @struPlayInfo, nil , pUser, TRUE);
lRealHandle := NET_DVR_RealPlay_V30(lUserID, @struPlayInfo, nil ,1 , FALSE);

//设置回调函数,在回调里面解码
//lRealHandle := NET_DVR_RealPlay_V30(lUserID, @struPlayInfo, @testRealDataCallBack_V30, pUser, TRUE);
if lRealHandle>=0 then
begin
Btn_Play.Enabled := False;
Btn_Stop.Enabled := True;
NET_DVR_MakeKeyFrame(lUserID,struPlayInfo.lChannel); /////
MyNode := TreeView1.Items.Add(nil,'device'); /////
MyNode.Data := Ptr(-1); /////
for i := 1 to {di.byChanNum }10 do /////
begin
ChildNode := TreeView1.Items.AddChild(MyNode, Format('Channel--%d',[i]));
GetMem(P,Sizeof(Byte));
p^ := i-1;
ChildNode.Data := Pointer(p);
end;
end
else
begin
dwRet := NET_DVR_GetLastError();
Showmessage('预览失败,错误号为'+ IntToStr(dwRet));
end;
Self.SetFocus;
end;
...全文
1477 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun28900638 2018-06-25
  • 打赏
  • 举报
回复
我也是按照各大师的方法去做集成,但是就一直不能成功预览,能给我也发一份DEMO吗?C#的DEMO我是可以预览的,证明和DLL的版本没有关系,28900638@qq.com,请帮忙!谢谢!
_菜菜 2015-03-30
  • 打赏
  • 举报
回复
海康的开发包里边都带有例子的,虽然都是VC的,但对应的数据类型改一下就能用了
yct0605 2015-03-26
  • 打赏
  • 举报
回复
引用 14 楼 houjiuhong 的回复:
[quote=引用 11 楼 yct0605 的回复:] 留个邮箱,我发给你一份试试看。
1071790644@qq.com 谢谢啦[/quote] 已发,请查收。
houjiuhong 2015-03-26
  • 打赏
  • 举报
回复
引用 11 楼 yct0605 的回复:
留个邮箱,我发给你一份试试看。
1071790644@qq.com 谢谢啦
houjiuhong 2015-03-26
  • 打赏
  • 举报
回复
引用 11 楼 yct0605 的回复:
留个邮箱,我发给你一份试试看。
可以同时观看两个,但是很卡,甚至有时间差,怎么调节参数呢
houjiuhong 2015-03-25
  • 打赏
  • 举报
回复
引用 9 楼 yct0605 的回复:
[quote=引用 8 楼 houjiuhong 的回复:] [quote=引用 7 楼 yct0605 的回复:] Demo就是Delphi编写的,还什么嵌入到D里面啊。
我就是用的那个demo,问题是看不到实时的视频[/quote] 提示预览成功了吗?如果登录预览都没有报错,而看不到图像,建议更新一下HCNetSDK.dll和PlayCtrl.dll两个动态库文件,因为版本低的话是看不到预览图像的。[/quote] 登录成功了,但是看不懂图像,这两个库上哪更新呢,官网上都没有delphi的,请问哪有最新的啊
yct0605 2015-03-25
  • 打赏
  • 举报
回复
引用 8 楼 houjiuhong 的回复:
[quote=引用 7 楼 yct0605 的回复:] Demo就是Delphi编写的,还什么嵌入到D里面啊。
我就是用的那个demo,问题是看不到实时的视频[/quote] 提示预览成功了吗?如果登录预览都没有报错,而看不到图像,建议更新一下HCNetSDK.dll和PlayCtrl.dll两个动态库文件,因为版本低的话是看不到预览图像的。
houjiuhong 2015-03-25
  • 打赏
  • 举报
回复
引用 7 楼 yct0605 的回复:
Demo就是Delphi编写的,还什么嵌入到D里面啊。
我就是用的那个demo,问题是看不到实时的视频
SVIP_ 2015-03-25
  • 打赏
  • 举报
回复
NET_DVR_Init(); //初始化 ....... //登录 var conInfo: NET_DVR_DEVICEINFO; begin LoginId := NET_DVR_Login('192.168.0.101',8000,'admin','12345',@conInfo); end; //预览 var PlayInfo: NET_DVR_CLIENTINFO; begin PlayInfo.lChannel := 1; PlayInfo.lLinkMode := (1 shl 31) or 0; PlayInfo.hPlayWnd := pnl3.Handle; PlayInfo.sMultiCastIP := nil; hnds := NET_DVR_RealPlay(LoginId,@PlayInfo);
yct0605 2015-03-25
  • 打赏
  • 举报
回复
留个邮箱,我发给你一份试试看。
houjiuhong 2015-03-24
  • 打赏
  • 举报
回复
引用 2 楼 yct0605 的回复:
网上找的海康Delphi视频预览的代码,仅供参考使用。 海康Demo
那岂不是不能实时监控了,用delphi
yct0605 2015-03-24
  • 打赏
  • 举报
回复
网上找的海康Delphi视频预览的代码,仅供参考使用。 海康Demo
houjiuhong 2015-03-24
  • 打赏
  • 举报
回复
procedure tfRealDataCallBack_V30(lRealHandle: Longint; dwDataType: Longword; pBuffer: LPByte; dwBufSize: Longword; pUser:Pointer);stdcall; begin if dwDataType = NET_DVR_SYSHEAD then begin if (not(PlayM4_GetPort(@g_nPort))) then //获取播放库未使用的通道号 begin Exit; end; if dwBufSize > 0 then begin if not(PlayM4_SetStreamOpenMode(g_nPort, STREAME_REALTIME)) then //设置实时流播放模式 begin Exit; end; if not(PlayM4_OpenStream(g_nPort, pBuffer, dwBufSize, 1024*1024)) then //打开流接口 begin Exit; end; if not(PlayM4_Play(g_nPort, Form1.Btn_Play_Wnd.Handle)) then begin Exit; end; end; end; if dwDataType = NET_DVR_STREAMDATA then begin if (dwBufSize > 0) and (g_nPort <> -1) then begin if not(PlayM4_InputData(g_nPort, pBuffer, dwBufSize)) then begin Exit end; end; end; end; 这个是做什么用的,不执行啊
yct0605 2015-03-24
  • 打赏
  • 举报
回复
Demo就是Delphi编写的,还什么嵌入到D里面啊。
yct0605 2015-03-24
  • 打赏
  • 举报
回复
难道楼主看不懂“网上找的海康Delphi视频预览的代码,仅供参考使用。无语了......
houjiuhong 2015-03-24
  • 打赏
  • 举报
回复
引用 4 楼 yct0605 的回复:
预览就是实况,可以看到实时画面的。你的实时监控是什么?
也就是预览,除了监控室,我还想将监控嵌入到我的delphi中,可以看到
yct0605 2015-03-24
  • 打赏
  • 举报
回复
预览就是实况,可以看到实时画面的。你的实时监控是什么?

1,183

社区成员

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

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