当前位置:   article > 正文

Vue项目接入海康威视智能应用平台监控摄像头全过程分享_vue海康威视摄像头web开发

vue海康威视摄像头web开发

最近项目需要对接天目慧眼系统(基于海康威视智能应用平台),获取几个监控点的摄像头并展示在前端,这里用到的api就两个:/api/resource/v1/cameras分页获取监控点资源、/api/video/v1/cameras/previewURLs获取监控点预览取流URL。

首先,我们需要获取摄像头IP和端口号,还有AK/SK(AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。)

其次,使用官方提供的OpenAPI接口测试工具(见下图中5)测试所需接口是否正常返回,正常的话继续使用官方提供的H5player(见下图中4)验证上一步返回的监控点预览取流URL是否可以预览。这里我研究了很久,想仅通过前端拼接请求头等信息直接获取监控点预览取流URL,但最后人工客服说了目前只能保证postman能调通接口,不能保证通过此方式请求到接口,还是得通过后端集成官方提供的OpenAPI 安全认证库 (见下图中6),然后前端调用后端接口获取相应信息。

视频流协议类型有4种:rtsp-rtsp协议、rtmp-rtmp协议、hls-HLS协议、ws-Websocket协议。我最后采用的是ws,没有采用hls是因为获取的监控点预览取流URL是http的,好像有跨域问题,懒得再设置了。

最后将H5player引入到Vue项目中,接入视频流进行预览。我们先把H5player文件夹中的h5player.min.js和Decoder.js放到vue项目对应路径下;再把<script src="./h5player.min.js"></script>、<script src="./Decoder.js"></script>两个标签引入index.html中;接着在页面中加入<div id="H5Video"></div>;

接着像下方一样写方法即可。需要注意的是:流媒体播放时必传入的参数名称需要为“playURL”,我在代码里给它赋值监控点预览取流url了。不这样设置可能会导致报错和无法播放。

  1. //下方为海康视频播放器所需变量
  2. const { JSPlugin } = window;
  3. var curIndex = 0; // 当前窗口下标
  4. var myPlugin = new JSPlugin({
  5. szId: "H5Video", //需要英文字母开头 必填
  6. szBasePath: "@/utils/h5player.min.js", // 必填,引用H5player.min.js的js相对路径
  7. // 当容器div#play_window有固定宽高时,可不传iWidth和iHeight,窗口大小将自适应容器宽高
  8. iWidth: 600,
  9. iHeight: 400,
  10. // 分屏播放,默认最大分屏4*4
  11. openDebug: true,
  12. // 分屏播放
  13. iMaxSplit: 4,
  14. iCurrentSplit: 1,
  15. // 设置样式
  16. oStyle: {
  17. border: "#FFF",
  18. borderSelect: "#FFCC00",
  19. background: "#000",
  20. },
  21. });
  22. initPlugin();
  23. // 事件初始化
  24. function initPlugin() {
  25. myPlugin.JS_SetWindowControlCallback({
  26. windowEventSelect(iWindIndex) {
  27. // 插件选中窗口回调
  28. console.log("windowSelect callback: ", iWindIndex);
  29. },
  30. pluginErrorHandler(iWindIndex, iErrorCode, oError) {
  31. // 插件错误回调
  32. console.error(`window-${iWindIndex}, errorCode: ${iErrorCode}`, oError);
  33. },
  34. windowEventOver(iWindIndex) {
  35. // 鼠标移过回调
  36. console.log("鼠标移过回调", iWindIndex);
  37. },
  38. windowEventOut(iWindIndex) {
  39. // 鼠标移出回调
  40. console.log("鼠标移出回调", iWindIndex);
  41. },
  42. windowFullCcreenChange(bFull) {
  43. // 全屏切换回调
  44. console.log("全屏切换回调", bFull);
  45. },
  46. firstFrameDisplay(iWndIndex, iWidth, iHeight) {
  47. // 首帧显示回调
  48. console.log("首帧显示回调", iWndIndex, iWidth, iHeight);
  49. },
  50. performanceLack(iWndIndex) {
  51. // 性能不足回调
  52. console.log("性能不足回调", iWndIndex);
  53. },
  54. });
  55. realplay();
  56. }
  57. // 播放初始化
  58. function realplay() {
  59. let startTime, endTime;
  60. var playURL = res2.data.url; //获取到的监控点预览取流URL
  61. myPlugin
  62. .JS_Play(
  63. res2.data.url,
  64. {
  65. playURL, // 流媒体播放时必传
  66. mode: 0, // 解码类型:0=普通模式; 1=高级模式 默认为0
  67. },
  68. curIndex, //当前窗口下标
  69. // 回放参数
  70. startTime,
  71. endTime
  72. )
  73. .then(
  74. () => {
  75. console.info("JS_Play success");
  76. // do you want...
  77. },
  78. (err) => {
  79. console.info("JS_Play failed:", err);
  80. // do you want...
  81. }
  82. );
  83. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/683992
推荐阅读
相关标签
  

闽ICP备14008679号