Unity 接入海康摄像头(WebGL,PC),避坑专用

禅 無 2024-08-29 09:33:10 阅读 88

Unity 接入海康摄像头(WebGL,PC),避坑专用

介绍:项目需要,接入海康威视摄像头云台。应用场景:Unity开发某个物流园区的数字孪生系统,在3D场景中点击监控摄像头图标,弹框播放现场的摄像头画面。

准备:Unity2023.3.0a14、海康威视设备、OpenAPI安全认证库(C#) V1.0.1、AVProVideo、Postman等

说明

Unity版本:用WebGPU提升场景和整体渲染效果,至于Unity2023设置WebGPU相关内容可去官网查看,在Unity6.0版本将推出该设置选项

OpenAPI 安全认证库:海康接口都需要进行安全认证才可正常访问,可在海康开放平台下载(有坑,后续介绍)

AVProVideo:视频流播放插件(PC的话也可用UMP替换,但UMP发布WebGL有报错)

正文

1.线下园区安装好海康威视设备会给每台设备一个唯一的设备标(CameraIndexCode)Unity端会用到这个ID去请求接口,保持设备正常运行,在内网部署设备管理后台,负责与前端进行交互请求,这个海康那边会安排专业人员协助。

2.Unity端事项:

1)导入OpenAPI认证库(C#),该库海康已经封装了基于HTTP的POST和GET请求。以及设置平台信息的接口SetPlatformInfo接口。在HttpUtil脚本内,该类还提供了AK和SK生成签名的相关接口。

SetPlatformInfo:

Http请求前设置相关平台信息

InitHttpRequest:

初始化Http Request-通常POST不需要,海康的接口需要此步骤

Get:

Get请求

Post:

Post请求

**注意!!!**以上接口由海康提供,可支持非WebGL端项目开发(坑1)。楼主当时也是完全用该接口完成接入,验证编辑器下和发布PC端应用都可以正常使用。在发布WebGL时,*点击事件直接卡死!!!*吐槽:Unity发布WebGL的坑太多,开发要走的路远远不止当下。后续解读源码发现该问题其实在另一个地方就遇到了!

原因(重点)WebGL不支持IO操作,注意System.IO相关接口。

通常读取StreamingAssets文件夹下文件会用File.ReadAllTxt()等接口,在WebGL该接口不可用需要用WWW或UnityWebRequest下载读取。

解决办法:

分析海康Get接口和Post接口,代码块用到Stream和StreamReader两个API,这就导致在WebGL端Http请求时,直接卡死的原因,咱们找到原因得想法解决,在深层次分析原因是HttpWebRequest这个API导致得,这里咱们可以用UnityWebRequest这个API去重写Post和Get方法。相关核心代码如下:

InitRequest:

初始化Request,底层代码还是用的海康的接口

Get:

基于UnityWebRequest的Get请求

Post:

基于UnityWebRequest的Post请求

获取监控设备推流地址(POST_GetCameraUrl):camCode:设备编码,唯一标识

推流地址获取接口

跨域请求(坑2)

到此我们发布WebGL测试,点击事件不再出现卡死现象。但接着F12查看日志,发现又一个问题,WebGL上Http请求跨域的问题,这个问题导致的原因是由于发布部署到本地nginx服务上。而Http请求的接口地址是在另一个域名下导致。

跨域解决方案

AVProVideo在WebGL平台设置

config

Unity:

Unity-1

Unity-2

hls

总结:每一份耕耘都有一定收获,WebGL的坑源源不止。希望Unity数字孪生系统希望未来有一套成熟的解决方案,兼容各个平台。本项目在WebGL端场景渲染这块也砍了很多刀才能流畅的运行(FPS>60),最后上个项目截图:

项目

应用

资源分享:WebGL平台基于AVProVideo播放海康设备监控实实画面demo源码。

以上内容会分享在以下Demo中。源码下载地址



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。