海康网络摄像机密码2号网线不通是怎么回事?

问题解决:部分海康网络摄像头无法实现视频流解码与实时预览
一. 问题描述
最近在搭建一个可视传感网,在调试初期就遇到了一个很奇怪的问题:
同样的型号的摄像机,同样的程序,有一部分摄像头正常工作,而有一大部分的不能正常解码显示。这个小demo是我使用海康SDK里面实例写的。文章的最后给出项目的代码,有兴趣的也可以跑跑程序,其实只是一个简单的例程而已,写在这里只是为了方便日后归纳总结。这里使用的海康网络摄像头型号是:DS-2CD852MF-E。
代码中,摄像头的登录函数为:NET_DVR_Login_V30 ,播放函数:NET_DVR_RealPlay_V40。
在回调解码函数处设置断点,能跳到此函数中:
vcPmo6zN+MLnyePP8c23tcS1x8K8w7vT0M7KzOKjrLWryse+zcrHw7vT0Lutw+ahozwvcD4NCjxwPjxpbWcgYWx0PQ=="这里写图片描述" src="/uploadfile/Collfiles/6.png" title="\" />
单步调试,看到lRealHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, g_RealDataCallBack_V30, NULL); lRealHandle值为0,表示没有问题的啊&但是在回调函数设置断点却进不去,就说明没有回调解码。跟上面的区别就在这里。但是代码是一模一样的,摄像机型号都是一样的852MF-E,因此不知道问题出在哪里。
二. 解决方法
以上问题可简单描述为,一个可用的程序,但对一部分摄像头硬件可用,这些摄像头型号均是一样的,因此第一时间的想法是查看这些摄像机软件版本或者硬件固件版本是否一致,答案是否定的:
因此我又试了多个摄像机,只要是v2.0 build 100521 和v4.0 build 090220,这样的都能显示,但是其他的软件版本都显示不了。一时半会要更新软件或固件版本也是一大工程,因此继续查阅SDK开发文档,发现其实可以查看设备登录预览的SDK日志,在代码中,只需在SDK初始化后调用NET_DVR_SetLogToFile()函数即可保存日志信息。启用写日志文件的函数定义如下:
BOOL NET_DVR_SetLogToFile(
nLogLevel,
*strLogDir,
其中,nLogLevel 表示日志的等级(默认为0):0-表示关闭日志,1-表示只输出ERROR错误日志,2-输出ERROR错误信息和DEBUG调试信息,3-输出ERROR错误信息、DEBUG调试信息和INFO普通信息等所有信息;
strLogDir 表示日志文件的路径,windows默认值为&C:SdkLog&;linux默认值&/home/sdklog/&;
bAutoDel 表示是否删除超出的文件数,默认值为TRUE。
生成日志文件,发现其实是缺少了必要的dll文件。
SDK V4.3.0.6
[ 14:58:00.599][INF] version:This hcnetsdk version is 4.3.0.6 Version .
SDK V4.3.0.6[ 14:58:00.599][INF] LogonDev1 192.168.3.22:8000 in
[ 14:58:00.601][INF] Private connect 192.168.3.22:8000 sock=496 this=0xf115e8 cmd=0x10000 port=30473
[ 14:58:00.601][INF] OpenCommandConnection ptr=0xf115e8 id=4096
[ 14:58:00.601][INF] [SendCommandWithRecv] this=0xf115e8, cmd_id=0x1000, cmd=0x10000
[ 14:58:00.615][INF] [CloseCommandConnection] this=0xf115e8, cmd_id=0x1000
[ 14:58:00.615][INF] StopLinkInConnection sock=496 this=0xf115e8, command=0x10000
[ 14:58:00.620][INF] LogonDev1 192.168.3.22:8000 in
[ 14:58:00.630][INF] Private connect 192.168.3.22:8000 sock=496 this=0xf115e8 cmd=0x10010 port=30474
[ 14:58:00.630][INF] OpenCommandConnection ptr=0xf115e8 id=8192
[ 14:58:00.630][INF] [SendCommandWithRecv] this=0xf115e8, cmd_id=0x2000, cmd=0x10010
[ 14:58:00.631][DBG] MainStream 0xf0
[ 14:58:00.631][INF] SubStream 0x0, RTP/RTSP[0], Private and RTSP[0], streamPacketType[0x0]
[ 14:58:00.631][INF] [CloseCommandConnection] this=0xf115e8, cmd_id=0x2000
[ 14:58:00.631][INF] StopLinkInConnection sock=496 this=0xf115e8, command=0x10010
[ 14:58:00.636][INF] LogonDev1 192.168.3.22:8000 out, dev_ver=, protocol=0xf0f0 sn=DS2CD852MF-EBCCHWC
[ 14:58:00.636][INF] [UserCtrlInstance::AddUser] m_nCurrentUserIndex=0, i=0, m_nTotalUserNum=1
[ 14:58:00.636][INF] Login success. UserID=0, DevIP=192.168.3.22
[ 14:58:02.095][DBG] BaseEngine[class CNetPreviewSession / 1 / 1]::AllocSession[0] get instance[00F177C0]
[ 14:58:02.095][INF] Preview Session=0 channel[1], UserID[0]
[ 14:58:02.095][DBG] [0] userid[0] this[f177c0]PreviewStart in block[0] cbreal[13018cf]stand[0] userdatap[0] dw[0], hwnd[1905a2]
[ 14:58:02.095][INF] StreamMode[0], StreamProtocol[0xf0f0]
[ 14:58:02.095][DBG] [0] PreviewStart out
[ 14:58:02.095][DBG] [0][192.168.3.22:8000]preview LinkToDvr
[ 14:58:02.095][INF] StreamMode[0], StreamProtocol[0xf0f0]
[ 14:58:02.125][ERR] GlobalCtrl load [E:Herbert Project单个摄像机解码并显示DebugStreamTransClient.dll] with sdk path failed and get handle[0]
[ 14:58:02.129][ERR] Load StreamTransClient failed[syserr: 126]
[ 14:58:02.129][ERR] Preview Session=0 link proto=4
[ 14:58:02.129][ERR] [0] preview MainPreview link failed!!!
[ 14:58:02.129][DBG] userid[0] Preview[0] AysoNonBlockThread callback exception
[ 14:58:09.918][INF] [0]PreviewStop begin
[ 14:58:09.918][DBG] [0] NetPreview SessionStop in, player nPort[-1]
[ 14:58:09.918][ERR] (IExchangeProxy::RigisterCommandIndex)this preview[0] is not registered.
[ 14:58:09.918][DBG] [0] NetPreview SessionStop out
[ 14:58:09.918][DBG] BaseEngine[class CNetPreviewSession / 512 / 1 / 1]::DestroySessionByIndex[0] instance[00F177C0]
[ 14:58:12.274][DBG] FiniSDK begin SDK fini[1]
[ 14:58:12.274][DBG] [0] DelUser CurrentUserIndex -1 total[0]
[ 14:58:13.135][DBG] stop time thread
后面的操作就很简单了,在海康的SDK库文件中找到StreamTransClient.dll和SystemTransform.dll并添加到工程项目底下,问题解决。
三. 项目部分代码
上传时发现文件过大,因此只贴出部分代码:
// SingleCamDlg.cpp : 实现文件
#include stdafx.h
#include SingleCamApp.h
#include SingleCamDlg.h
#include afxdialogex.h
#include HCNetSDK.h
#include plaympeg4.h
#ifdef _DEBUG
#define new DEBUG_NEW
// CSingleCamDlg 对话框
LONG nPort = -1;
HWND hPlayWnd = NULL;//播放句柄
LONG lUserID = -1;
LONG lRealHandle = -1;
CString IPToStr(DWORD dwIP);
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2);
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser);
CSingleCamDlg::CSingleCamDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CSingleCamDlg::IDD, pParent)
m_hIcon = AfxGetApp()-&LoadIcon(IDR_MAINFRAME);
void CSingleCamDlg::DoDataExchange(CDataExchange* pDX)
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CAM_IP, m_ctrlDeviceIP);//界面网址控件与类变量绑定
BEGIN_MESSAGE_MAP(CSingleCamDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTN_Login, &CSingleCamDlg::OnBnClickedBtnLogin)
ON_BN_CLICKED(IDC_BTN_PlayCam, &CSingleCamDlg::OnBnClickedBtnPlaycam)
ON_BN_CLICKED(IDC_BTN_StopCam, &CSingleCamDlg::OnBnClickedBtnStopcam)
END_MESSAGE_MAP()
BOOL CSingleCamDlg::OnInitDialog()
CDialogEx::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
执行此操作
SetIcon(m_hIcon, TRUE);
// 设置大图标
SetIcon(m_hIcon, FALSE);
// 设置小图标
// TODO: 在此添加额外的初始化代码
//此处需要对SDK进行init初始化
NET_DVR_Init();
isLogin = FALSE;
isPlaying = FALSE;
hPlayWnd = GetDlgItem(IDC_ViewWindow)-&m_hW
//在程序初始化的时候就获取播放窗口的句柄
m_ctrlDeviceIP.SetAddress(192, 168, 2, 21);
GetDlgItem(IDC_BTN_PlayCam)-&EnableWindow(FALSE); //初始状态,播放和停止按钮都是失能的
GetDlgItem(IDC_BTN_StopCam)-&EnableWindow(FALSE);
return TRUE;
// 除非将焦点设置到控件,否则返回 TRUE
void CSingleCamDlg::OnPaint()
if (IsIconic())
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
CDialogEx::OnPaint();
HCURSOR CSingleCamDlg::OnQueryDragIcon()
return static_cast(m_hIcon);
/////////////////////////////全局函数的定义///////////////////////
CString IPToStr(DWORD dwIP)
CString strIP = _T();
WORD add1,add2,add3,add4;
add1=(WORD)(dwIP&255);
add2=(WORD)((dwIP&&8)&255);
add3=(WORD)((dwIP&&16)&255);
add4=(WORD)((dwIP&&24)&255);
strIP.Format(%d.%d.%d.%d,add4,add3,add2,add1);
return strIP;
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser)
switch (dwDataType)
case NET_DVR_SYSHEAD: //头
if (!PlayM4_GetPort(&nPort))
//获取播放库未使用的通道号
//m_iPort = lP //第一次回调的是系统头,将获取的播放库port号赋值给全局port,下次回调数据时即使用此port号播放
if (dwBufSize & 0)
if (!PlayM4_SetStreamOpenMode(nPort, STREAME_REALTIME))
//设置实时流播放模式
if (!PlayM4_OpenStream(nPort, pBuffer, dwBufSize, )) //打开流接口
//设置解码回调函数 只解码不显示
//if (!PlayM4_SetDecCallBack(lPort,DecCBFun))
//dRet=PlayM4_GetLastError(nPort);
//设置解码回调函数 解码且显示在窗口句柄中
if (!PlayM4_SetDecCallBackEx(nPort,DecCBFun,NULL,NULL))
if (!PlayM4_SetDisplayBuf(nPort, 4))//设置缓冲区大小,2-5
if (!PlayM4_Play(nPort,hPlayWnd)) //播放开始
case NET_DVR_STREAMDATA:
//码流数据
if (dwBufSize & 0 && nPort != -1)
if (!PlayM4_InputData(nPort, pBuffer, dwBufSize))
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
////////////////////////////////////////////////////////////////
void CSingleCamDlg::OnBnClickedBtnLogin()//登录
if (isLogin) //如果已经登录,就需要执行注销
NET_DVR_Logout(lUserID);
isLogin = FALSE;
GetDlgItem(IDC_BTN_Login)-&SetWindowTextA(登录);
GetDlgItem(IDC_BTN_PlayCam)-&EnableWindow(FALSE);
//播放按钮 失效
char DeviceIP[16] = {0};
DWORD dwDeviceIP = 0;
m_ctrlDeviceIP.GetAddress(dwDeviceIP);
CString csTemp = IPToStr(dwDeviceIP);
sprintf_s(DeviceIP, %s, csTemp.GetBuffer(0));
NET_DVR_DEVICEINFO_V30 struDeviceI
lUserID = NET_DVR_Login_V30(DeviceIP, 8000, admin, 12345, &struDeviceInfo);
if (lUserID & 0) //登录失败时,其他几个按钮都需要disable
AfxMessageBox(登录失败!);
isLogin = FALSE;
isLogin = TRUE;
GetDlgItem(IDC_BTN_Login)-&SetWindowTextA(注销);
//登录成功, 变成注销
GetDlgItem(IDC_BTN_PlayCam)-&EnableWindow(TRUE);
//播放按钮 有效
void CSingleCamDlg::OnBnClickedBtnPlaycam() //播放
NET_DVR_PREVIEWINFO struPlayInfo = {0};
struPlayInfo.hPlayWnd
//需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
struPlayInfo.lChannel
//预览通道号
struPlayInfo.dwStreamType = 0;
//0-主码流,1-子码流,2-码流3,3-码流4,以此类推
struPlayInfo.dwLinkMode
//0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
lRealHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, g_RealDataCallBack_V30, NULL);
if (lRealHandle & 0)
AfxMessageBox(播放失败!);
isPlaying = FALSE;//播放标志位设置为假
GetDlgItem(IDC_BTN_Login)-&EnableWindow(FALSE);
//登录按钮失效
GetDlgItem(IDC_BTN_PlayCam)-&EnableWindow(FALSE);
//播放按钮失效
GetDlgItem(IDC_BTN_StopCam)-&EnableWindow(TRUE);
//停止按钮 有效
isPlaying = TRUE;
void CSingleCamDlg::OnBnClickedBtnStopcam()//停止
NET_DVR_StopRealPlay(lRealHandle);
//释放播放库资源
PlayM4_Stop(nPort);
PlayM4_CloseStream(nPort);
PlayM4_FreePort(nPort);
GetDlgItem(IDC_BTN_Login)-&EnableWindow(TRUE);
//登录按钮失效
GetDlgItem(IDC_BTN_PlayCam)-&EnableWindow(TRUE);
//播放按钮 有效
GetDlgItem(IDC_BTN_StopCam)-&EnableWindow(FALSE);
//停止按钮 失效海康威视IP网络摄像机使用手册(V1.0)_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
海康威视IP网络摄像机使用手册(V1.0)
&&海康威视IP Camera的详细配置参数,试用于所有海康威视的IP摄像机型号
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩19页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢海康威视远程监控网络设置方法
郑州弱电工程设计施工
河南视频会议系统设计施工
河南智能家居系统
河南公共广播系统工程设计施工
郑州安防监控设备销售安装
郑州多媒体发布系统
郑州弱电综合布线
郑州弱电网络机房建设
LED显示屏及多媒体发布系统
郑州建筑智能工程设计施工
郑州手机联网远程监控系统
智能停车场道闸及人行通道闸
郑州智能停车场道闸通道闸系统
郑州门禁巡更考勤一卡通设备
河南防盗报警系统
弱电智能化工程系统集成
郑州智能楼宇可视对讲系统设计施工
郑州电子围栏安装设计
郑州监控维保
录像机设置详细且有图说明.-专业河南,弱电智能化工程设计施工安装,远程视频会议系统设备销售,背景音乐公共广播系统设计,电梯梯控刷卡系统、电梯监控系统、电梯五方对讲无线对讲系统,门禁、考勤、防盗报警器材安装调试,周界报警、电子围栏、入侵红外探测器设备安装调试,智能家居系统设计、设备销售,安防监控、安检防爆设备租赁,海康威视全线产品设备销售,安防监控弱电系统维护维保维修,网络弱电综合布线施工。随着社会的发展,人们生活质量的提高,视频监控不仅仅在本地可以随时监控,还可以远程时时监控了,今天就介绍下海康威视录像机远程监控怎么设置方法/步骤1. 第一步:DVR的相关设置,确认以下几点是否全部填写 2. 第二步:端口映射(以下提供两种配置方法,两种选择一种就可以了)1、UPnP自动端口映射说明:该设置有一个要求,需要路由器支持UPnP这个功能,所以请先确认自己使用的路由器是否支持该功能,如果支持UPnP的,可以参考以下设置,如果不支持UPnP的请严格按照第2点中的端口映射来操作。操作步骤如下:登陆路由器配置界面,开启UPnP功能,进入设备本地配置界面,启用UPn,刷新端口,看状态显示为“生效”即可。2、路由器端口映射登陆路由器的配置界面,找到虚拟服务器(或者是端口映射),映射端口(设备默认80、三个端口,可在设备上修改,三个端口必须同时映射,缺一不可)&如果在同一台路由器上有多台监控设备,请使用端口号来区分,不能重复使用端口。 &3. 第三步:配置自定义域名  1、快捷配置点击鼠标右键,选择快捷配置-&快捷上网配置勾选启用DDNS,设置设备域名(自定义,只支持小写字母、数字以及“—”且必须以小写字母开头,必填),手机号码(后续增值服务使用,必填)。当设备状态显示在线时可以使用自动生成的访问地址来访问设备。& 注意:配置DDNS前,需保证设备正常接入公网。注意:1.如果设备通过路由器接入公网,需要开启路由器的UPnP功能并配置设备的UPnP参数或者在路由器上做端口映射。2.如果配置失败,可能原因是网络不通或者域名冲突,请先检查网络,若网络正常则尝试修改其他域名2 设备访问打开IE浏览器,在地址栏直接输入http://www./自定义域名,例如配置了设备域名为test12345,则直接输入http://www./test12345,即可直接链接到设备登录界面。打开iVMS-4500手机客户端,进入“设备管理”界面添加设备。设备别名处输入注册的设备域名(例如test12345),注册类型选择DDNS,DNS地址默认为www.,端口为80(固定填写),输入设备用户名密码,保存之后即可进入预览界面预览。打开iVMS-4200客户端软件,进入“设备管理”界面添加设备。选择私有域名方式添加,协议类型选择成DDNS,填写设备域名、用户名、密码,即可正常使用iVMS-4200客户端软件访问设备
上一篇: &
下一篇: &
周一至周五 :8:30-17:30周六至周日 :9:00-17:00吴经理:张经理:技术咨询:5办公室:9网站首页:海康主机网络摄像机支持表_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
海康主机网络摄像机支持表
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 海康网络摄像机ip设置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信