精华内容
下载资源
问答
  • OpenCV+海康威视摄像头的实时读取

    万次阅读 多人点赞 2015-12-18 11:12:09
    OpenCV+海康威视摄像头的实时读取环境 硬件: PC:i7-4970 16GB内存 摄像头型号:DS-2CD3310D-I(2.8mm) 软件: windows-x64、vs2012、opencv2.4.8、hkvision5114-x64版本库 配置 保证使用SADP工具可以识别摄像头...

    #OpenCV+海康威视摄像头的实时读取

    本文由 @lonelyrains出品,转载请注明出处。
    文章链接: http://blog.csdn.net/lonelyrains/article/details/50350052

    之前没想过会有这么多朋友遇到问题,所以建了 qq群1:536898072 qq群2:1071276535,专门供大家以后一起交流讨论图像和机器学习的工程实践问题。

    vx: blade170103

    ##环境

    ##配置

    • 保证使用SADP工具可以识别摄像头,然后配置IP与电脑在同一个网段。
      这里写图片描述
    • 再保证可以从浏览器中访问。账号密码默认的一般是admin、a123456789(老版本的摄像头密码是12345)。
      这里写图片描述
      登录成功后可能要求下载WebComponent控件,下载好了安装便是。如果仍然出现如下画面:
      这里写图片描述
      则换一种浏览器试。一般是默认浏览器没问题的。
      这里写图片描述
    • 配置使用sdk中自带的ClientDemo.exe工具可以访问
      这里写图片描述
      这里写图片描述
    • 配置sdk开发环境
      – opencv的配置
      这里不展开讲opencv的配置,仅说明需要配置opencv环境变量、设置好对应的vs开发环境的属性配置
      这里写图片描述
      这里写图片描述
      这里写图片描述
      – 海康威视sdk属性配置
      因为是64位环境,为了增强属性配置的内聚性,单独添加新项目属性表,设置海康威视sdk的属性
      这里写图片描述
      这里写图片描述
      这里写图片描述
      这里写图片描述
      依赖库写全,为:
      HCNetSDK.lib;PlayCtrl.lib;ws2_32.lib;winmm.lib;GdiPlus.lib;IPHlpApi.Lib;%(AdditionalDependencies)

    ##代码及说明

    #include <opencv\cv.h>
    #include <opencv\highgui.h>
    
    #include <iostream>
    
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <windows.h>
    #include <HCNetSDK.h>
    /*#include "PlayM4.h"*/
    #include <plaympeg4.h>
    #include <opencv2\opencv.hpp>
    #include <time.h>
    
    #include "global.h"
    #include "readCamera.h"
    
    #define USECOLOR 1
    
    using namespace cv;
    using namespace std;
    
    //--------------------------------------------
    int iPicNum=0;//Set channel NO.
    LONG nPort=-1;
    HWND hWnd=NULL;
    
    
    void yv12toYUV(char *outYuv, char *inYv12, int width, int height,int widthStep)
    {
    	int col,row;
    	unsigned int Y,U,V;
    	int tmp;
    	int idx;
    
    	//printf("widthStep=%d.\n",widthStep);
    
    	for (row=0; row<height; row++)
    	{
    		idx=row * widthStep;
    		int rowptr=row*width;
    
    		for (col=0; col<width; col++)
    		{
    			//int colhalf=col>>1;
    			tmp = (row/2)*(width/2)+(col/2);
    			//         if((row==1)&&( col>=1400 &&col<=1600))
    			//         { 
    			//          printf("col=%d,row=%d,width=%d,tmp=%d.\n",col,row,width,tmp);
    			//          printf("row*width+col=%d,width*height+width*height/4+tmp=%d,width*height+tmp=%d.\n",row*width+col,width*height+width*height/4+tmp,width*height+tmp);
    			//         } 
    			Y=(unsigned int) inYv12[row*width+col];
    			U=(unsigned int) inYv12[width*height+width*height/4+tmp];
    			V=(unsigned int) inYv12[width*height+tmp];
    			//         if ((col==200))
    			//         { 
    			//         printf("col=%d,row=%d,width=%d,tmp=%d.\n",col,row,width,tmp);
    			//         printf("width*height+width*height/4+tmp=%d.\n",width*height+width*height/4+tmp);
    			//         return ;
    			//         }
    			if((idx+col*3+2)> (1200 * widthStep))
    			{
    				//printf("row * widthStep=%d,idx+col*3+2=%d.\n",1200 * widthStep,idx+col*3+2);
    			} 
    			outYuv[idx+col*3]   = Y;
    			outYuv[idx+col*3+1] = U;
    			outYuv[idx+col*3+2] = V;
    		}
    	}
    	//printf("col=%d,row=%d.\n",col,row);
    }
    
    
    
    //解码回调 视频为YUV数据(YV12),音频为PCM数据
    void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
    {
    	long lFrameType = pFrameInfo->nType;	
    
    	if(lFrameType ==T_YV12)
    	{
    #if USECOLOR
    		//int start = clock();
    		static IplImage* pImgYCrCb = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 3);//得到图像的Y分量  
    		yv12toYUV(pImgYCrCb->imageData, pBuf, pFrameInfo->nWidth,pFrameInfo->nHeight,pImgYCrCb->widthStep);//得到全部RGB图像
    		static IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 3);  
    		cvCvtColor(pImgYCrCb,pImg,CV_YCrCb2RGB);  
    		//int end = clock();
    #else
    		static IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth,pFrameInfo->nHeight), 8, 1);  
    		memcpy(pImg->imageData,pBuf,pFrameInfo->nWidth*pFrameInfo->nHeight); 
    #endif
    		//printf("%d\n",end-start);
    
    		Mat frametemp(pImg),frame;
    
    		//frametemp.copyTo(frame);
    // 		cvShowImage("IPCamera",pImg);
    // 		cvWaitKey(1);
    		EnterCriticalSection(&g_cs_frameList);
    		g_frameList.push_back(frametemp);
    		LeaveCriticalSection(&g_cs_frameList);
    
    #if USECOLOR
    // 		cvReleaseImage(&pImgYCrCb);
    // 		cvReleaseImage(&pImg);
    #else
    		/*cvReleaseImage(&pImg);*/
    #endif
    		//此时是YV12格式的视频数据,保存在pBuf中,可以fwrite(pBuf,nSize,1,Videofile);
    		//fwrite(pBuf,nSize,1,fp);
    	}
    	/***************
    	else if (lFrameType ==T_AUDIO16)
    	{
    	//此时是音频数据,数据保存在pBuf中,可以fwrite(pBuf,nSize,1,Audiofile);
    
    	}
    	else
    	{
    
    	}
    	*******************/
    
    }
    
    
    ///实时流回调
    void CALLBACK fRealDataCallBack(LONG lRealHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void *pUser)
    {
    	DWORD dRet;
    	switch (dwDataType)
    	{
    	case NET_DVR_SYSHEAD:    //系统头
    		if (!PlayM4_GetPort(&nPort)) //获取播放库未使用的通道号
    		{
    			break;
    		}
    		if(dwBufSize > 0)
    		{
    			if (!PlayM4_OpenStream(nPort,pBuffer,dwBufSize,1024*1024))
    			{
    				dRet=PlayM4_GetLastError(nPort);
    				break;
    			}
    			//设置解码回调函数 只解码不显示
    			if (!PlayM4_SetDecCallBack(nPort,DecCBFun))
    			{
    				dRet=PlayM4_GetLastError(nPort);
    				break;
    			}
    
    			//设置解码回调函数 解码且显示
    			//if (!PlayM4_SetDecCallBackEx(nPort,DecCBFun,NULL,NULL))
    			//{
    			//	dRet=PlayM4_GetLastError(nPort);
    			//	break;
    			//}
    
    			//打开视频解码
    			if (!PlayM4_Play(nPort,hWnd))
    			{
    				dRet=PlayM4_GetLastError(nPort);
    				break;
    			}
    
    			//打开音频解码, 需要码流是复合流
    // 			if (!PlayM4_PlaySound(nPort))
    // 			{
    // 				dRet=PlayM4_GetLastError(nPort);
    // 				break;
    // 			}		
    		}
    		break;
    
    	case NET_DVR_STREAMDATA:   //码流数据
    		if (dwBufSize > 0 && nPort != -1)
    		{
    			BOOL inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
    			while (!inData)
    			{
    				Sleep(10);
    				inData=PlayM4_InputData(nPort,pBuffer,dwBufSize);
    				OutputDebugString(L"PlayM4_InputData failed \n");	
    			}
    		}
    		break;	
    	}		
    }
    
    void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
    {
    	char tempbuf[256] = {0};
    	switch(dwType) 
    	{
    	case EXCEPTION_RECONNECT:    //预览时重连
    		printf("----------reconnect--------%d\n", time(NULL));
    		break;
    	default:
    		break;
    	}
    }
    
    unsigned readCamera(void *param)
    {
    	//---------------------------------------
    	// 初始化
    	NET_DVR_Init();
    	//设置连接时间与重连时间
    	NET_DVR_SetConnectTime(2000, 1);
    	NET_DVR_SetReconnect(10000, true);
    
    	//---------------------------------------
    	// 获取控制台窗口句柄
    	//HMODULE hKernel32 = GetModuleHandle((LPCWSTR)"kernel32");
    	//GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
    
    	//---------------------------------------
    	// 注册设备
    	LONG lUserID;
    	NET_DVR_DEVICEINFO_V30 struDeviceInfo;
    	lUserID = NET_DVR_Login_V30("192.168.2.64", 8000, "admin", "a123456789", &struDeviceInfo);
    	if (lUserID < 0)
    	{
    		printf("Login error, %d\n", NET_DVR_GetLastError());
    		NET_DVR_Cleanup();
    		return -1;
    	}
    
    	//---------------------------------------
    	//设置异常消息回调函数
    	NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);
    
    
    	//cvNamedWindow("IPCamera");
    	//---------------------------------------
    	//启动预览并设置回调数据流 
    	NET_DVR_CLIENTINFO ClientInfo;
    	ClientInfo.lChannel = 1;        //Channel number 设备通道号
    	ClientInfo.hPlayWnd = NULL;     //窗口为空,设备SDK不解码只取流
    	ClientInfo.lLinkMode = 0;       //Main Stream
    	ClientInfo.sMultiCastIP = NULL;
    
    	LONG lRealPlayHandle;
    	lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID,&ClientInfo,fRealDataCallBack,NULL,TRUE);
    	if (lRealPlayHandle<0)
    	{
    		printf("NET_DVR_RealPlay_V30 failed! Error number: %d\n",NET_DVR_GetLastError());
    		return 0;
    	}
    
    	//cvWaitKey(0);
    	Sleep(-1);
    
    	//fclose(fp);
    	//---------------------------------------
    	//关闭预览
    	if(!NET_DVR_StopRealPlay(lRealPlayHandle))
    	{
    		printf("NET_DVR_StopRealPlay error! Error number: %d\n",NET_DVR_GetLastError());
    		return 0;
    	}
    	//注销用户
    	NET_DVR_Logout(lUserID);
    	NET_DVR_Cleanup();
    
    	return 0;
    }
    

    其中最终得到的帧保存在g_frameList.push_back(frametemp);中。前后设置了对应的锁,用来对该帧序列的读写进行保护。这一部分内容是要自己完成的。即定义变量:

    CRITICAL_SECTION g_cs_frameList;
    std::list<Mat> g_frameList;

    主函数中的调用代码,先建立线程,调用上述读摄像头的函数的回调,并把读到的帧序列保存在g_frameList中,然后再读取该序列,保存到Mat里即可:

    int main()
    {	
    	HANDLE hThread;
    	unsigned threadID;
    	Mat frame1;
    
     	InitializeCriticalSection(&g_cs_frameList);
     	hThread = (HANDLE)_beginthreadex( NULL, 0, &readCamera, NULL, 0, &threadID );
     	...
    	EnterCriticalSection(&g_cs_frameList);
    	if(g_frameList.size())
    	{
    		list<Mat>::iterator it;
    		it = g_frameList.end();
    		it--;
    		Mat dbgframe = (*(it));
    		//imshow("frame from camera",dbgframe);
    		//dbgframe.copyTo(frame1);
    		//dbgframe.release();
            (*g_frameList.begin()).copyTo(frame[i]);
    		frame1 = dbgframe;
    		g_frameList.pop_front();
    	}
    	g_frameList.clear(); // 丢掉旧的帧
    	LeaveCriticalSection(&g_cs_frameList);
    	...
    
    	return 0;
    }
    
    展开全文
  • 本Demo包含海康威视摄像头调用的ActiveX控件制作及调用代码,功能强大(压缩包包含三个文件,一个是ActiveX控件开发项目、一个是控件调用项目、另一个是说明文档)
  • Camstar集成海康威视摄像头 Camstar集成海康威视摄像头
  • 海康威视摄像头对接demo,支持球机枪机对接
  • 海康威视摄像头ps流视频文件
  • 海康威视摄像头驱动包,用于web开发,在网页中调用摄像头
  • 海康威视摄像头 onvif 鉴权

    万次阅读 2018-09-19 15:47:45
    在调试海康威视摄像头过程中,遇到无法鉴权成功的问题。在调试海康威视摄像头过程中,遇到无法鉴权成功的问题。同样的代码,其他的摄像头均能鉴权成功,而海康威视的摄像头却不能。 问题原因 这是由于海康威视的...
    1. 问题描述
      在调试海康威视摄像头过程中,遇到无法鉴权成功的问题。同样的代码,其他的摄像头均能鉴权成功,而海康威视的摄像头却不能。

    2. 问题原因
      其他的摄像头,网页登录用的用户名和密码与onvif鉴权用的用户名和密码一致。而海康威视的摄像头则是分开的,每种支持的协议都有用户名和密码,onvif协议也不例外。

    3. 问题解决
      打开网页,输入摄像头网址,会提示输入用户名密码,输入进入即可。
      点击“配置”选项,进入:网络->高级配置->集成协议
      选择“启用onvif”,并选择对应的用户名(最好是管理员的),修改密码即可。

    4. 如果你看到本篇博客是因为标题且为了onvif代码而来,请参考我的另几篇博客即可,所生成的代码亲测好用,地址如下:

    gSOAP生成onvif鉴权客户端代码框架:https://blog.csdn.net/JoshYueby/article/details/83270587
    mips移植openssl,生成库文件及头文件:https://blog.csdn.net/JoshYueby/article/details/82627537
    Linux将多个文件生成.so文件:https://blog.csdn.net/JoshYueby/article/details/82382505

    展开全文
  • vue集成海康威视摄像头webVideoCtrl.js

    万次阅读 热门讨论 2019-03-14 11:20:48
    项目上需要在web页面上集成海康威视摄像头监控页面,通过与海康威视sdk开发联系,获得了一份demo demo中的结构目录 ├── cn │ ├── demo-easy.html │ ├── demo.html │ ├── demo-iframe.html │...

    项目上需要在web页面上集成海康威视摄像头监控页面,通过与海康威视sdk开发联系,获得了一份demo,码云地址(包含demo与vue) 具体海康的demo与vue的demo,请移步码云,https://gitee.com/yushi6310/webVideoCtrl
    在这里插入图片描述
    demo中的结构目录

    ├── cn
    │   ├── demo-easy.html
    │   ├── demo.html
    │   ├── demo-iframe.html
    │   ├── demo.js
    │   ├── demo-requirejs.html
    │   ├── demo-seajs.html
    │   ├── iframe.html
    │   └── sfy_demo.html
    ├── codebase
    │   ├── jsPlugin-1.0.0.min.js
    │   ├── playctrl
    │   │   ├── AudioRenderer.js
    │   │   ├── Decoder.js
    │   │   ├── Decoder.js.mem
    │   │   ├── DecodeWorker.js
    │   │   └── SuperRender.js
    │   ├── transform
    │   │   ├── SystemTransform.js
    │   │   ├── SystemTransform.js.mem
    │   │   └── systemTransform-worker.min.js
    │   ├── WebComponentsKit.exe
    │   └── webVideoCtrl.js
    ├── demo.css
    ├── index.html
    ├── jquery-1.7.1.min.js
    ├── require-2.3.3.min.js
    └── sea-3.0.1.min.js
    
    

    这个demo有浏览器要求,建议使用ie11

    直接打开demo,配置摄像头的相关信息(ip地址啥的),可以直接在浏览器上实时预览摄像头信息,
    在vue中直接引用webVideoCtrl.js时,实时预览失败,同时控制摄像头转动的功能也是失败的 ,经过几天的排查,修改部分webVideoCtrl.js源码,在vue中终于可以使用了
    修改后的代码下载
    修改后的webVideoCtrl.js代码

    请在index.html中将这个js文件引进来

    在这里插入图片描述

    下面介绍vue中引用webVideoCtrl.js

    <template>
      <div>
        <el-row>
          <el-col :span="12">
            <div id="divPlugin" class="plugin"></div>
            <br/>
            <div>
              <el-form :inline="true" :model="hkvInfo" class="demo-form-inline">
                <el-row>
                  <el-col>
                    <el-form-item label="ip">
                      <el-input v-model="hkvInfo.ip" placeholder="ip"></el-input>
                    </el-form-item>
                    <el-form-item label="port">
                      <el-input v-model="hkvInfo.port" placeholder="port"></el-input>
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-row>
                  <el-col>
                    <div>
                      <el-form-item label="username">
                        <el-input v-model="hkvInfo.username" placeholder="username"></el-input>
                      </el-form-item>
                      <el-form-item label="password">
                        <el-input v-model="hkvInfo.password" placeholder="password"></el-input>
                      </el-form-item>
                    </div>
                  </el-col>
                </el-row>
                <el-row>
                  <el-col>
                    <el-form-item>
                      <el-button type="primary" :loading="loginLoading" @click="onLogin">登录</el-button>
                      <el-button type="primary" :loading="startPlayLoading" @click="clickStartRealPlay">开始预览</el-button>
                      <el-button type="primary" @click="clickStopRealPlay">停止预览</el-button>
                      <el-button type="primary" @click="onLogout">退出</el-button>
                    </el-form-item>
    
                  </el-col>
                </el-row>
              </el-form>
            </div>
            <div>
              <label>数字通道列表: </label>
              <el-tag type="success" class="my-tag" v-for="(item,index) in hkvInfo.channels" :key="index">{{item}}</el-tag>
            </div>
          </el-col>
          <el-col :span="12">
            <div class="el-button-group ">
              <div class="el-button primary" @mousedown="mouseDownPTZControl(5)" @mouseup="mouseUpPTZControl">左上</div>
              <div class="el-button primary" @mousedown="mouseDownPTZControl(1)" @mouseup="mouseUpPTZControl">向上</div>
              <div class="el-button primary" @mousedown="mouseDownPTZControl(7)" @mouseup="mouseUpPTZControl">右上</div>
            </div>
            <br/>
            <div class="el-button-group ">
              <div class="el-button primary" @mousedown="mouseDownPTZControl(3)" @mouseup="mouseUpPTZControl">向左</div>
              <div class="el-button primary" @mousedown="mouseDownPTZControl(9)" @mouseup="mouseUpPTZControl">自动</div>
              <div class="el-button primary" @mousedown="mouseDownPTZControl(4)" @mouseup="mouseUpPTZControl">向右</div>
            </div>
            <br/>
            <div class="el-button-group ">
              <div class="el-button primary" @mousedown="mouseDownPTZControl(6)" @mouseup="mouseUpPTZControl">左下</div>
              <div class="el-button primary" @mousedown="mouseDownPTZControl(2)" @mouseup="mouseUpPTZControl">向下</div>
              <div class="el-button primary" @mousedown="mouseDownPTZControl(8)" @mouseup="mouseUpPTZControl">右下</div>
            </div>
          </el-col>
        </el-row>
    
    
      </div>
    </template>
    
    
    <script>
      import {WebVideoCtrl} from '../../static/webVideoCtrl.js'
    
      export default {
    
        data() {
          return {
            hkvInfo: {
              ip: '1.1.1.1',//海康威视摄像头/硬盘录像机的ip地址
              port: '81',//海康威视摄像头/硬盘录像机的端口
              username: 'admin',//海康威视摄像头/硬盘录像机的用户名
              password: 'admin12345',//海康威视摄像头/硬盘录像机的密码
              channels: [],//海康威视摄像头/硬盘录像机的通道
            },
            mySelectWnd: 0,//当前选中的窗口
            g_bPTZAuto: false,
            iProtocol: 1,
            loginLoading: false,
            startPlayLoading: false,
            iStreamType: 1,
            bZeroChannel: false,
            iRtspPort: 0
          }
        },
        created: function () {
        },
        mounted: function () {
          this.videoInitPlugin(); // 初始化video界面
        },
    
        destroyed: function () {
          this.clickStopRealPlay();
          this.onLogout();
        },
        methods: {
          onLogin() {
            var that = this;
            that.loginLoading = true;
    
            // 登录设备
            WebVideoCtrl.I_Login(that.hkvInfo.ip, that.iProtocol, that.hkvInfo.port, that.hkvInfo.username, that.hkvInfo.password, {
              async: false,
              success: function (xmlDoc) {
                // console.log('xmlDoc2', xmlDoc);//不能删除
                //TODO 获取通道信息
                that.getChannelInfo();
                that.getDevicePort(that.hkvInfo.ip + "_" + that.hkvInfo.port);
                that.loginLoading = false;
    
                that.$message({
                  showClose: true,
                  message: '登录成功',
                  type: 'success'
                });
              },
              error: function () {
                that.loginLoading = false;
                that.$message({
                  showClose: true,
                  message: '登录失败',
                  type: 'error'
                });
              }
            });
          },
          onLogout() {
            this.hkvInfo.channels = [];
            var szDeviceIdentify = this.hkvInfo.ip + "_" + this.hkvInfo.port;
            var iRet = WebVideoCtrl.I_Logout(szDeviceIdentify);
            if (0 == iRet) {
              this.$message({
                showClose: true,
                message: '退出成功',
                type: 'success'
              });
            } else {
              this.$message({
                showClose: true,
                message: '退出失败',
                type: 'error'
              });
            }
          },
          clickStartRealPlay() {
            // 开始预览
            var that = this;
            that.startPlayLoading = true;
            var szDeviceIdentify = that.hkvInfo.ip + "_" + that.hkvInfo.port;
    
            var j = that.hkvInfo.channels.length > 4 ? 4 : that.hkvInfo.channels.length;
            for (var i = 0; i < j; i++) {
              setTimeout(that.startRealPlay(szDeviceIdentify, i, that.hkvInfo.channels[i]), 500);
            }
            that.startPlayLoading = false;
          },
          videoInitPlugin: function () {
            var iRet = WebVideoCtrl.I_CheckPluginInstall();
            if (iRet === -1) {
              alert('您还未安装过插件,双击开发包目录里的WebComponentsKit.exe安装');
              return;
            }
            this.initPlugin()
          },
          initPlugin: function () {
            var that = this;
    
            WebVideoCtrl.I_InitPlugin(500, 300, {
              bWndFull: true,//是否支持单窗口双击全屏,默I_CheckPluginInstall
              iWndowType: 2,
              myCbSelWnd: function (xmlStr) { //自己新增的方法
                var jsonObj = that.$x2js.xml2js(xmlStr);
                var szInfo = "当前选择的窗口编号:" + jsonObj.RealPlayInfo.SelectWnd;
                this.mySelectWnd = jsonObj.RealPlayInfo.SelectWnd;
                console.log(szInfo);
              },
              cbInitPluginComplete: function () {
                WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin");
                // 检查插件是否最新
                if (WebVideoCtrl.I_CheckPluginVersion() === -1) {
                  alert("检测到新的插件版本,双击开发包目录里的WebComponentsKit.exe升级!");
                  return;
                }
              }
            });
          },
          getDevicePort: function (szDeviceIdentify) {
            var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify);
            this.iRtspPort = oPort.iRtspPort;
          },
          startRealPlay: function (szDeviceIdentify, iWndIndex, iChannelID) {
            var that = this;
            WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
              iRtspPort: that.iRtspPort,
              iWndIndex: iWndIndex,
              iStreamType: 1,
              iChannelID: iChannelID,
              bZeroChannel: that.bZeroChannel,
              success: function () {
                that.$notify({
                  title: '成功',
                  message: '开始预览通道' + iChannelID + '成功',
                  type: 'success'
                });
              },
              error: function (status, xmlDoc2) {
                console.log(xmlDoc2)//不能删除
                that.$notify({
                  title: '失败',
                  message: '开始预览通道' + iChannelID + '失败',
                  type: 'error'
                });
                if (status === 403) {
                  console.log("szInfo 设备不支持Websocket取流!");
                } else {
                  console.log("开始预览失败 ", status, xmlDoc2);
                }
              }
            });
          },
          clickStopRealPlay: function () {
            var j = this.hkvInfo.channels.length > 4 ? 4 : this.hkvInfo.channels.length;
            for (var i = 0; i < j; i++) {
              setTimeout(this.stopRealPlay(i), 1000);
            }
          },
          stopRealPlay: function (iWndIndex) {
            var that = this;
            WebVideoCtrl.I_Stop({
              iWndIndex: iWndIndex,
              success: function () {
                that.$notify({
                  title: '成功',
                  message: '停止预览窗口' + iWndIndex + '成功',
                  type: 'success'
                });
              },
              error: function () {
                that.$notify({
                  title: '失败',
                  message: '停止预览窗口' + iWndIndex + '失败',
                  type: 'error'
                });
              }
            });
          },
          // 获取通道,实际上可以根据自己的项目,获取数字通道,模拟通道,零通道中的一个或多个,不用全部获取(提高效率)
          getChannelInfo: function () {
            var that = this;
            var szDeviceIdentify = this.hkvInfo.ip + "_" + this.hkvInfo.port;
            // debugger
            // 数字通道
            that.hkvInfo.channels = [];
            WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
                async: false,
                mysuccess: function (xmlStr) {
                  console.log('mysuccess I_GetDigitalChannelInfo: ', xmlStr)
                  var jsonObj = that.$x2js.xml2js(xmlStr)
                  var list = jsonObj.InputProxyChannelStatusList.InputProxyChannelStatus;
                  for (var x = 0; x < list.length; x++) {
                    that.hkvInfo.channels.push(list[x].id);
                  }
                },
                success: function (xmlDoc) {
                },
                error: function (status, xmlDoc) {
                  console.log("获取数字通道失败");
                }
              }
            );
            // TODO 模拟通道
            // 模拟通道
            WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {
              async: false,
              mysuccess: function (xmlStr) {
                var jsonObj = that.$x2js.xml2js(xmlStr);
                console.log("模拟通道mysuccess",xmlStr);
                var list = jsonObj.VideoInputChannelList.VideoInputChannel;
                for (var x = 0; x < list.length; x++) {
                  that.hkvInfo.channels.push(list[x].id);
                }
              },
              success: function (xmlStr) {
                console.log("模拟通道success",xmlStr);
              },
              error: function (status, xmlDoc) {
                console.log("模拟通道error",xmlDoc);
              }
            });
            // TODO 零通道
          },
          mouseDownPTZControl: function (iPTZIndex) {
            var oWndInfo = WebVideoCtrl.I_GetWindowStatus(this.mySelectWnd);
    
            if (oWndInfo !== null) {
              if (iPTZIndex === 9 && this.g_bPTZAuto) {
                iPTZSpeed = 0;
              } else {
                this.g_bPTZAuto = false;
              }
    
              WebVideoCtrl.I_PTZControl(iPTZIndex, false, {
                iPTZSpeed: 4,
                mysuccess: function (xmlDoc) {
                  console.log("I_PTZControl", xmlDoc);
                  if (iPTZIndex === 9 && this.g_bPTZAuto) {
                    console.log(oWndInfo.szDeviceIdentify + " 停止云台成功!");
                  } else {
                    console.log(oWndInfo.szDeviceIdentify + " 开启云台成功!");
                  }
                  if (iPTZIndex === 9) {
                    this.g_bPTZAuto = !this.g_bPTZAuto;
                  }
                },
                error: function (status, xmlDoc) {
                  console.log(oWndInfo.szDeviceIdentify + " 开启云台失败!", status, xmlDoc);
                }
              });
            }
          },
          mouseUpPTZControl: function () {
            var oWndInfo = WebVideoCtrl.I_GetWindowStatus(this.mySelectWnd);
    
            if (oWndInfo !== null) {
              WebVideoCtrl.I_PTZControl(1, true, {
                success: function (xmlDoc) {
                  console.log(oWndInfo.szDeviceIdentify + " 停止云台成功!", xmlDoc)
                },
                error: function (status, xmlDoc) {
                  console.log(oWndInfo.szDeviceIdentify + " 停止云台失败!", status, xmlDoc);
                }
              });
            }
          },
          myDown(aa) {
            console.log('ddd', aa);
          }
        }
      }
    </script>
    
    <style scoped>
      .plugin {
        width: 500px;
        height: 300px;
      }
    
      .my-tag {
        margin-left: 3px;
      }
    
      .my-group-btn {
        margin-top: 5px;
      }
    </style>
    
    

    如果出现报错提示:
    GetSelectWndInfo未定义等,相关报错信息,主要是你的js文件没有真正引入到你的项目中,请在index.html中也需要将这个js文件引进来

    如果出现如下报错信息, 因为vue会对代码有严格的格式校验,直接引入js会报错,请在设置忽略对js的格式校验

    在这里插入图片描述
    是因为vue对js代码有格式校验,请设置忽略该js的校验,忽略方法如下:
    在这里插入图片描述

    如果报错说: addEventlistener的错误 提示is not a function, xxxxxxxx is not a function是因为你引用的不是我修改后的js代码

    如果想显示多个摄像头录像信息,应该使用硬盘录像机

    在这里插入图片描述

    最终预览图片

    在这里插入图片描述

    如有疑问可以添加本人微信 yushi6310

    展开全文
  • 本代码是用Qt基于海康威视摄像头sdk开发的监控程序实例,比较简单,适用于新手使用,主要包括Qt下海康威视摄像头sdk环境的搭建,api的调用等
  • 海康威视摄像头OCX控件,可以显示摄像头图像、抓取图像、保存图像等,在C#、VB、组态王中都可以使用。 带:OCX控件接口说明(V2.3).doc
  • 海康威视摄像头的批量设置工具,可以批量的设置一批摄像头的参数配置,免去一个个登陆的麻烦
  • 海康威视摄像头Android SDK样例,支持多个视频接入,多个摄像机同时抓拍,单个视频焦距放大缩小
  • 通过SDK连接 java编写截取海康威视摄像头当前监控图片
  • 通过SDK连接 java编写海康威视摄像头检测设备网络信息
  • C#在网页调用海康威视摄像头实例分享 C#在网页调用海康威视摄像头实例分享
  • 通过SDK连接 java编写修改海康威视摄像头自动校时功能
  • 通过SDK连接 java编写查看海康威视摄像头自检的基本信息
  • 关于 海康威视 摄像头的整理-附件资源
  • 海康威视摄像头密码重置方法

    万次阅读 2020-09-30 14:24:43
    海康威视摄像头因设备型号不同,其密码重置有两种方式: 1、大部分型号的摄像头密码重置都可以通过软件在线的方式进行操作。具体操作如下: (1)摄像头与电脑通过网线连接,使摄像头与电脑处于同一局域网; (2)...

    海康威视摄像头因设备型号不同,其密码重置有两种方式:

    1、大部分型号的摄像头密码重置都可以通过软件在线的方式进行操作。具体操作如下:
    (1)摄像头与电脑通过网线连接,使摄像头与电脑处于同一局域网;

    (2)电脑下载海康DSAP 400密码重置助手客户端,安装后在打开的界面中找到需重置密码的摄像头,然后点击“忘记密码”;

    (3)然后根据界面提示一步一步完成操作即可重置密码。

     

    2、部分型号的摄像头在通过上面的方式重置密码时,扫描二维码后会提示该型号的摄像头不支持该方法重置密码,请联系分公司处理。遇到这种情况时可采用以下步骤操作:

    (1)在摄像头的背面有一个"RESET"标记(部分设备的RESET标记直接在背面,部分设备的RESET标记在MICRO卡槽里面),长按RESET按钮,将摄像头恢复出厂设置;

    (2)恢复出厂设置后,默认密码即为摄像头背面的验证码。

    展开全文
  • 海康威视摄像头安装与配置

    千次阅读 2020-05-30 20:28:17
    设备:海康威视摄像头、硬盘刻录机和内存条。 需要将硬盘刻录机拆开,才能安装内存条。 然后安装硬盘刻录机网线、电源线;安装摄像头网线、电源线。 摄像头配置 用户名与密码 自定义用户名和密码。新的设备,首次...
  • 海康威视摄像头web开发demo。Web控件基于ActiveX和NPAPI开发,接口封装于javascript脚本,以javascript接口形式提供用户集成,支持网页上实现预览、回放、云台控制等功能。该控件开发包仅支持B/S网页开发,不适用于C...
  • 海康威视摄像头1-4路播放测试
  • 通过SDK连接 java编写查看海康威视摄像头移动侦测和遮挡告警
  • 海康威视摄像头云台控制程序,部署在tomcat中,通过servlet,web服务访问
  • 基于MFC做的海康威视摄像头上位机软件,实现基本的功能。满足基本使用需求。可配置摄像头参数,播放视频录像、摄像头抓拍图片。控制调焦聚焦,速度变化等。HCNetSDKComRealPlay.tlogAudioRender.dllConfig.iniHCCore...
  • 一个简单的demo源码,通过填写局域网中海康威视摄像头的ip地址,端口号(默认8000),用户名(默认admin)和密码(海康的默认密码是“admin”+机身验证码),可以在登录后浏览摄像头,还有回放、捕获、对讲等简单功能...
  • <p>C# 开发海康威视摄像头一直找不到dll库, <p style="text-align:center"><img alt="" height="275" src="https://img-ask.csdnimg.cn/upload/1606998551219.PNG" width="866" /></p> 路径改了多次还是...
  • Java springBoot项目整合海康威视摄像头抓拍车辆功能

    千次阅读 热门讨论 2020-11-06 14:33:49
    Java springBoot项目整合海康威视摄像头抓拍功能

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 760
精华内容 304
关键字:

海康威视摄像头