-
关于海康威视sdk与海康威视web的史上最精细的教程 (一)
2018-06-09 11:48:48小伙伴们都在下方留言要开发包 web: https://download.csdn.net/download/qq_35583089/10537585 ... 大家自己下载一下吧。 最近在公司需要在项目里集成海康威视的摄像头,刚开始的时候只有个sdk压缩文件,完全...小伙伴们都在下方留言要开发包
web: https://download.csdn.net/download/qq_35583089/10537585
sdk: https://download.csdn.net/download/qq_35583089/10537610
大家自己下载一下吧。
最近在公司需要在项目里集成海康威视的摄像头,刚开始的时候只有个sdk压缩文件,完全是丈二的和尚摸不着头脑,花了几个小时在看文档与demo,有了一点头绪,但接下来在运行java demo 的时候,一步一个坑,在网上拼拼凑凑,总算可以将摄像头的画面显示出来,为了让更多的小伙伴可以更快速的实现这个功能,决定将自己遇到的困难及解决的办法一步一步记录下来,朋友们可以在下面讨论留言。
海康威视sdk
打开sdk的压缩文件,可以看到如下的内容
首先将java demo 在idea中打开,在项目的最下面,有一个文件 : SDK库文件拷贝到该目录下.txt,很明显,是要将库文件里面的所有文件都直接放到与这个文件平级的目录下
这时候运行ClientDemo里面的mian 方法,会看到如下界面:
成功显示这个窗口,表示库文件的目录没有放错。
如果运行main方法报如下错误检查你的库文件放置的目录与上面的图上的是否一致。(这个com/是我为了演示错误加上去的,demo的代码不用修改。)
接下来点击每一个按钮,都是提示你请先注册,点击注册按钮,又会弹出一个注册失败,真的完全不知道是什么意思。
这时候你发现你根本不知道摄像头的ip, 用户名,密码,端口号是多少,我在网上找了很久才找到解决的办法:安装海康的SADP软件可以看到同一个局域网下面每个摄像头的详情。但是账号和密码还是不正确。为了让大家少走弯路,给大家指一条最直接,最高效的路:关注海康威视客户服务 这个微信公众号 ->贴心服务->密码重置,可以直接下载到可以修改密码的SADP软件,真可谓是一箭双雕,哈哈。如下图所示:
上一步都弄好了,接下来可以回到直接运行main 方法那一步,填上SADP软件上显示的本地的摄像头的ip,端口号,还有修改过的账号密码,点击注册,接下来就是见证奇迹的时刻了。
海康威视web
很多小伙伴的公司不会使用java swing 的窗口来实现摄像头,这时候就会用到海康威视的web端集成。
可以直接在网上下载一个海康威视的web3.0开发包,直接打开demo.html ,用ie浏览器打开,会看到如下的页面,在预览页面之前,必须安装如下的这个软件。
打开页面:
点击允许此次访问的内容,如下图所示:
填写自己的设备信息,用户名密码,点击预览按钮,即可实现预览功能。
也可以将以下的配置文件放入项目内,直接打开demo.html是一样的效果:
下面就开始做我们需要的功能的,页面上的每个按钮对应webVideoCtrl.js里的各个方法,web开发包里面已经提供了API的说明文档 ,我们只需要对照API ,调用webVideoCtrl.js里面的方法就可以实现我们需要的功能。
以上的功能摸索了差不多2天,在网上各种找关于海康威视的博客,希望我总结的这篇文章可以帮到很多也在集成摄像头的朋友,快速的入门。以上如果有不对的地方,可以在下方留言讨论。
-
海康威视驱动
2018-08-30 14:02:25海康威视 -
海康威视web控件开发的正确姿势
2018-07-18 13:39:05最近一个vue的项目里面需要呈现某现场的实时视频,组里购买了一组海康威视的网络摄像头,是那种带管理程序的,通过ip,port,用户名,密码登录摄像头,但是不知道如何应用到web项目中。查找资料后,我在网上找到一个...最近一个vue的项目里面需要呈现某现场的实时视频,组里购买了一组海康威视的网络摄像头,是那种带CS端管理程序的,通过ip,port,用户名,密码登录摄像头,但是不知道如何应用到web项目中。查找资料后,我在网上找到一个web控件开发包,于是在此基础上进行开发,实现vue项目需要的功能。
熟悉demo程序
打开这个web控件开发包的文档,可以看到,这个控件是利用ActiveX控件和NPAPI实现的。IE上用ActiveX控件,Chrome基于NPAPI实现,并且需要安装codebase目录下的WebComponentsKit.exe插件。这里我们可以了解到,该控件不适用于高版本Chrome浏览器,这是一个很不爽的地方。不过目前还没有找到其他合适的方案,也只能试试这个方案了。
打开demo目录下的index.html,我们可以看到它支持的功能还是很多的。
而我并不需要这么多功能,只需要能把网络摄像头的画面呈现在项目页面上就好了。
定制开发
遇到的问题: 一开始也没有熟读这个控件的demo源码,就想着把从初始化到登录,再到预览这部分功能截取出来移植到Vue项目里就好。然而在裁剪代码的过程出现了各种报错,尝试定位错误的过程浪费了不少时间。
解决方法: 之后想到的方法是,把demo中的多余的功能一个一个去掉,在此过程中要观察demo是否可以正常登录和预览画面。最后的demo中我只保留了从初始化到登录以及预览这部分的代码。这个过程下来,我对这部分的js逻辑也是比较清楚了,最终也是顺利地移植到Vue项目中。
代码分享
移植的这部分代码我封装成了一个webVideo,js文件,供页面调用。
而在页面中,首先需要引入该js文件
import { WebVideo } from '@/assets/js/webVideo.js'
然后需要在mounted方法中进行初始化对象
this.webVideo = new WebVideo()
最后在打开dialog显示视频的位置调用init方法和clickLogin方法(我在clickLogin方法的成功回调函数中调用获取频道信息和设备端口的方法,并在这之后调用了预览方法)。
// 显示视频dialog this.videoBoxVisible = true // nextTick回调中调用init和clickLogin this.$nextTick(() => { this.webVideo.init() this.webVideo.clickLogin() })
最终可以看到摄像头画面啦,算是有了成果!
有朋友留言说想看一下这个js文件的写法,这里分享一下。有时候不能及时看到评论,见谅
// 初始化插件 export function WebVideo() { this.g_iWndIndex = 0 this.szDeviceIdentify = '' this.deviceport = '' this.deviceport = '' this.channels = [] this.ip = '172.29.3.101' this.port = '80' this.username = 'admin' this.password = '123456' this.init = function() { var self = this // 检查插件是否已经安装过 var iRet = WebVideoCtrl.I_CheckPluginInstall(); if (-1 == iRet) { alert("您还未安装过插件,双击开发包目录里的WebComponentsKit.exe安装!"); return; } // 初始化插件参数及插入插件 WebVideoCtrl.I_InitPlugin('100%', '100%', { bWndFull: true, iPackageType: 2, iWndowType: 1, cbInitPluginComplete: function () { WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin"); } }); } // 登录 this.clickLogin = function () { var self = this if ("" == self.ip || "" == self.port) { return; } self.szDeviceIdentify = self.ip + "_" + self.port; WebVideoCtrl.I_Login(self.ip, 1, self.port, self.username, self.password, { success: function (xmlDoc) { setTimeout(function () { self.getChannelInfo(); self.getDevicePort(); }, 10); setTimeout(function() { self.clickStartRealPlay() }, 500) }, error: function (status, xmlDoc) { } }); } // 退出 this.clickLogout = function() { var self = this if (null == self.szDeviceIdentify) { return; } var iRet = WebVideoCtrl.I_Logout(self.szDeviceIdentify); if (0 == iRet) { self.getChannelInfo(); self.getDevicePort(); } } // 获取通道 this.getChannelInfo = function() { var self = this self.channels = [] if (null == self.szDeviceIdentify) { return; } // 模拟通道 WebVideoCtrl.I_GetAnalogChannelInfo(self.szDeviceIdentify, { async: false, success: function (xmlDoc) { var oChannels = $(xmlDoc).find("VideoInputChannel"); $.each(oChannels, function (i) { var id = $(this).find("id").eq(0).text(), name = $(this).find("name").eq(0).text(); if ("" == name) { name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1)); } self.channels.push({ id: id, name: name }) }); }, error: function (status, xmlDoc) { } }); } // 获取端口 this.getDevicePort = function() { var self = this if (null == self.szDeviceIdentify) { return; } var oPort = WebVideoCtrl.I_GetDevicePort(self.szDeviceIdentify); if (oPort != null) { self.deviceport = oPort.iDevicePort; self.deviceport = oPort.iRtspPort; } } // 开始预览 this.clickStartRealPlay = function() { var self = this var oWndInfo = WebVideoCtrl.I_GetWindowStatus(self.g_iWndIndex), iChannelID = self.channels[0].value if (null == self.szDeviceIdentify) { return; } var startRealPlay = function () { WebVideoCtrl.I_StartRealPlay(self.szDeviceIdentify, { iRtspPort: self.deviceport, iStreamType: '1', iChannelID: iChannelID, bZeroChannel: false, success: function () { }, error: function (status, xmlDoc) { if (403 === status) { } else { } } }); }; if (oWndInfo != null) {// 已经在播放了,先停止 WebVideoCtrl.I_Stop({ success: function () { startRealPlay(); } }); } else { startRealPlay(); } } // 停止预览 this.clickStopRealPlay = function() { var self = this var oWndInfo = WebVideoCtrl.I_GetWindowStatus(self.g_iWndIndex) if (oWndInfo != null) { WebVideoCtrl.I_Stop({ success: function () { }, error: function () { } }); } } }
2018年12月1日补充
很多人都有报错的情况,请检查下是否在index.html中引用了这个js,这个js来源于Web控件开发包。<script type="text/javascript" id="videonode" src="static/webVideoCtrl.js"></script>
对了,还有一个jsPlugin-1.0.0.min.js也需要放在static目录下,但是不需要在index.html引用,因为webVideoCtrl.js会主动去调用同目录下的jsPlugin-1.0.0.min.js。
我能补充的坑大概就这些了吧,因为这个项目也过去很久了,我用到的功能也真的少,对于不能答复大家太多深入的问题,我感到抱歉。
开发包64位下载地址
链接:https://pan.baidu.com/s/19uCuu838TwP-OBqWqo-MPw
提取码:futg开发包32位下载地址
链接:https://pan.baidu.com/s/1byAij-cStvoYhS9SlV5dDw
提取码:f24r -
海康威视HCUsbSDK
2020-11-20 16:57:20海康威视DS-K1F100-D8E发卡器Java版,HCUsbSDK相关内容,包含USBSDKJavaDemo和相关文档,ClientDemo和HCUsbSDK.dll驱动程序 -
海康威视文档
2018-11-14 12:06:29海康威视ivms 的接口服务文档说明包括android java ios -
海康威视标定
2018-07-16 16:14:20海康威视相机标定DEMO,可以进行抓图,相机参数的计算以及标定 -
海康威视OCX
2015-12-04 13:43:22海康威视OCX文档 -
OpenCV+海康威视摄像头的实时读取
2015-12-18 11:12:09OpenCV+海康威视摄像头的实时读取环境 硬件: 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,专门供大家以后一起交流讨论图像和机器学习的工程实践问题。
##环境
- 硬件:
PC:i7-4970 16GB内存 摄像头型号:DS-2CD3310D-I(2.8mm) - 软件:
windows-x64、vs2012、opencv2.4.8、hkvision5114-x64版本库
##配置
- 保证使用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; }
- 硬件:
-
海康威视mib
2018-09-03 21:18:54海康威视mib库 HIK-Device-mib HIK-DEVICE-MIB DEFINITIONS ::=BEGIN IMPORTS enterprises, OBJECT-TYPE, Integer32, IpAddress FROM SNMPv2-SMI; test OBJECT IDENTIFIER ::= { enterprises 39165} devicemib... -
海康威视开发文档
2018-08-02 14:16:03海康威视开发文档海康威视开发文档海康威视开发文档海康威视开发文档海康威视开发文档海康威视开发文档 -
使用海康威视设备在Web端显示实时视频
2018-12-03 21:19:27硬件:萤石的摄像头(海康威视旗下的),海康威视的硬盘录像机。 软件:vlc 2.2.6版本。 Web端和移动端接入萤石云平台的视频数据https://blog.csdn.net/qq_38289815/article/details/92615824 海康威视Web端视频...前言
目前做的项目,需要Web端显示实时视频数据。本次项目使用的是海康威视的摄像头进行实时监控。
硬件:萤石的摄像头(海康威视旗下的),海康威视的硬盘录像机。
软件:vlc 2.2.6版本。
Web端和移动端接入萤石云平台的视频数据 https://blog.csdn.net/qq_38289815/article/details/92615824
海康威视Web端视频开发 https://blog.csdn.net/qq_38289815/article/details/92428396
萤石云摄像头Http接口云台控制开发 https://blog.csdn.net/qq_38289815/article/details/94288310
前期工作:
将视频摄像头和海康威视的硬盘录像机连接在同一网段,并设置好硬盘录像机的IP地址和端口号。摄像头要通过通道管理设置通道号,IP通道地址等。
下载 vlc :
地址:http://download.videolan.org/vlc/2.2.6/win64/
安装好vlc后进行如下操作
(1)打开媒体中的流
(2)在网络中设置RTSP并选择串流
参数如下:
(3)点击下一个后在新目标选择HTTP并点击添加
(4)设置端口和路径
(5)选择Video - Theor + Vorbis (OGG)
(6)选择流所有通量流,最后点击流结束设置
没有报错时,可以打开网络串流后点击播放。如果报错了,需要检查相应的参数有没有填写对,也有可能是端口被占用的情况。
正常显示图像
完成上述工作后,在Web端复制如下代码:
<object type='application/x-vlc-plugin' pluginspage="http://www.videolan.org/" id='vlc' events='false' width="720" height="410"> <param name='mrl' value='rtsp://[账号]:[密码]@[设备IP地址]/MPEG-4/ch1/main/av_stream' /> <param name='volume' value='50' /> <param name='autoplay' value='true' /> <param name='loop' value='false' /> <param name='fullscreen' value='false' /> <param name='controls' value='false' /> </object> <video src="http://[本机IP地址]:[端口]/testVideo" width="600" height="450" autoplay="autoplay" loop="loop"></video>
统一回复一下各位遇到问题的小伙伴,这个方法是我之前尝试过的,现在身边已经没有相应的设备和环境了,想复现比较难。如果遇到 vlc 播放器有视频数据而网页没有显示,则应该检查 IP、端口号、vlc版本问题和硬盘录像机的设置。若本机 IP 没有错,可以多尝试几个端口(尽量往大了试),看能不能解决问题。如果这个方法不行,可以尝试一下开头的其他方式。
注意:摄像头和硬盘录像机不在同一网段可能导致无法显示图像。
-
海康威视Demo
2016-08-18 16:58:47海康威视摄像头调用demo+开发SDK(修改ip,端口,帐号,密码)可用 -
海康威视驱动文件
2018-08-07 16:00:09海康威视的dll文件,用于二次开发的好东西!海康威视的dll文件,用于二次开发的好东西!海康威视的dll文件,用于二次开发的好东西!海康威视的dll文件,用于二次开发的好东西!海康威视的dll文件,用于二次开发的好... -
海康威视SADP
2015-09-14 11:51:11海康威视网络摄像头查询工具,针对海康摄像头IP修改,调试等问题进去处理解决。 -
RTSP视频流显示(海康威视)
2019-07-01 09:29:57RTSP视频流显示(海康威视)VLCSDK(C++)ffmpeg+Nginx 本文目的主要是想要在html上实时显示海康威视的摄像头数据,笔者尝试了如下三种方式: VLC SDK(C++) ffmpeg+Nginx 下面分别说说通过这几种方式如何实现在... -
海康威视图库
2015-06-10 15:20:26监控霸主海康威视的VISIO图例,海康是业界知名品牌,好的图例让PPT如老虎插上翅膀,蛟龙进了水。 -
海康威视web监控
2019-04-28 13:42:55海康威视公司的web端的监控,js,调用.dll文件,非常简单 -
海康威视Visio图库
2019-08-27 10:04:25海康威视各种设备Visio图库大全,用于写方案。各类弱电图标大全,方便使用,附带30度立体坐标画法规范 -
海康威视web开发包
2019-01-09 14:29:38海康威视web开发包,海康威视SDK二次开发,支持外网访问海康威视监控设备 -
海康威视ocx demo
2018-03-27 09:55:09海康威视 ocx demo 实时预览&抓图&云台控制 -
海康威视播
2012-12-19 20:24:54海康威视播放器,播放监控视频,回放查找内容 -
海康威视开发文档.zip
2019-10-11 17:34:52海康威视摄像头接口文档,海康威视摄像头接口文档海康威视摄像头接口文档海康威视摄像头接口文档 -
海康威视X86SDK
2018-04-11 20:58:04海康威视X86SDK,需要演示Demo的可以去博主的博客里面看 -
海康威视Javademo
2018-08-27 10:49:12海康威视的Java版本测试demo(内含jar包),预览 , 回放等常用功能 -
海康威视OCX插件
2018-02-27 10:45:59海康威视的视频监控插件,OCX控件,web插件,支持在线预览视频 -
海康威视SDK JNA 全部
2020-09-12 22:36:58海康威视SDK开发过程中,需要使用JAVA调用SDK,通过JNA来调用,这个是全套的接口文档,包含原始SDK的所有接口,对接所有海康威视的硬件设备 -
海康威视接口稳定
2018-03-19 15:56:02海康威视的c#接口文档,主要用于与pms3.0的接口通讯。 -
海康威视插件安装
2015-05-06 23:56:19海康威视插件安装
-
转行做IT-第1章 计算机基础
-
React17+React Hook+TS4 最佳实践 仿 Jira 企业级项目
-
Kotlin协程极简入门与解密
-
行业分类 职业分类 职务分类 单位性质。
-
grbl 源代码 配置部分翻译中文
-
三维地图GIS大数据可视化
-
visual c++ vc内存池源代码,用于分配固定大小的内存,速度超快又方便.zip
-
大数据Hive on MR/TEZ与hadoop的整合应用
-
2021适用三级网络技术.rar
-
QT 多文档文本编辑器
-
RabbitMq与Spring整合实例
-
华工数字通信原理大作业
-
"万年历" C语言 新手
-
国家注册渗透测试工程师(Web安全)
-
备战2021软考网络规划设计师顺利通关培训套餐
-
将两条宽带通过两个路由器组成一个局域网的方法.zip
-
【Leetcode】1138. Alphabet Board Path
-
【数据分析-随到随学】Spark理论及实战
-
【Leetcode】1590. Make Sum Divisible by P
-
QT 拼图游戏