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

本文讲述了如何在Unity中使用WebGL和海康威视摄像头进行集成,涉及OpenAPI安全认证、AVProVideo视频播放插件及WebGL平台下的跨域问题解决。作者分享了从设备标识别到跨域配置的实战经验和解决方案,确保了在Unity数字孪生系统中的流畅运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中。源码下载地址

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值