近期,公司一升级项目需要在线视频预览,用到海康威视的硬盘录像机,接手之后发现原有的组件(NetVideoActiveX23.ocx),登录接口和获取设备、通道等接口都正常调用,预览接口StartRealPlay总是返回失败,没找到原因,只能重新写了一遍。这里记录一下用WebComponentsKit对海康威视进行预览时的心得,希望对各位有所帮助。
- WebComponentsKit和NetVideoActiveX23的登录端口不一样,这里要特别注意,WebComponentsKit通过HTTP端口登录,而NetVideoActiveX23则是通过一个叫服务端口来登录。具体可以登录硬盘录像机的配置页面进行查看。
- WebComponentsKit支持域名登录和IP登录,NetVideoActiveX23只支持IP登录
- WebComponentsKit登录接口为异步模式,回调写在SUCCESS中,这个看demo就知道了。
var iRet = WebVideoCtrl.I_Login(IP, protocol, Port, Username, Password, { success: function (xmlDoc) { }, error: function () { } });
- 预览接口I_StartRealPlay,默认显示在当前选中窗口。如果要指定视频显示在哪个窗口,通过参数iWndIndex来指定,iWndIndex从0开始。
var iRet = WebVideoCtrl.I_StartRealPlay(IP, { iWndIndex: wndIndex, iStreamType: 1, iChannelID: iChannelID,bZeroChannel: false})
可以通过上述方式来同时预览多个视频通道
g_iWndIndex = 0; for (var i = 0; i < channels.length; i++) { (function (index) { setTimeout(function () { StartRealPlay(IP, index, index + 1); g_iWndIndex++; }, 50); })(i); }
- 有时调用预览接口失败,发现webVideoCtrl.js中p内容为空,n为-1,没找到原因(知道的朋友可以回复,谢谢),暂时添加if (S != undefined)跳出不处理(还没发现影响)
var S = p[n];if (S != undefined) S.bShttpIPChannel = P
以上如有错漏,恳请指出,方便大家共同学习!