Unity +Webgl+AVProVideo+海康监控M3U8取码流+XChart

心路历程:博主接到任务:做一版可发布的webgl版的数字可视化项目。着重点就是海康监控与webgl的兼容问题,博主在网上搜了一堆方案,还是有可取的地方,为了方便以后使用,博主记录一下心路历程。博主博主第一次写日志,希望对广大网友有所帮助;

重要信息前置:以下是博主个人总结,希望有所帮助

1.webgl最大发布包大小上限2G

2.webgl不支持UMP视频播放插件(导致海康RTSP取码流就不能播放)

3.unity自带字体不支持,可使用TextMeshProUGUI插件

4.不支持多线程

5.不支持Debug调试

6.不支持socket通信,Newtonsoft.json,如果需要网络通信需要使用www或unitywebrequest,RestClient

7.颜色空间(Color Space)不支持Linear

8.不支持postprocess(后期)

9.不支持HDRP渲染通道

PS:由于webgl不支持UMP,博主到目前为止没有找到可支持播放rtsp取码流格式的unity插件,博主网搜了很多,都是利用VLCPlayer播放器(还有WebServer,RTSPtoWebServer/RTSPtoWeb.exe)进行播放视频,而不是内嵌在unity中,所以博主最终放弃了RTSP 和RTMP,如果有大大研发出了一款支持RTSP和RTMP取码流可发布webgl版的欢迎留言

1.webgl发布设置:

平台选择以及设置,直接上图:

 2.player settings

 

 

 

 2.AVProVideo+播放海康视频流m3u8

        博主是按照这篇文章进行步步操作的,里面步骤很详细,着重点是4和5步骤,博主懒,就不写了。

直接上链接:(1条消息) Unity WebGL 播放视频流m3u8_菜菜ANY的博客-CSDN博客

3.场景模型的内存大小优化

      一听到优化博主就很头疼,更过分的是金主爸爸要求不能遮挡剔除,不能使用LOD,等等。。。    一个头两个大,博主就开始翻遍其它博主大大的日志,这几篇就很不错,网友们可以看看:

(1条消息) 基于Unity开发WebGL项目加载AB包(一)_unity webgl 资源加载_梵高先森丶的博客-CSDN博客

(1条消息) Unity中发布WebGL的内存_泼孩的博客-CSDN博客

博主在这里总结一下博主的优化方案:

方案1:减小模型材质贴图的maxsize,这个变化是很明显的,原理就是压缩图片,博主发现压缩之后模型也没有多大的区别,网友们参考即可,博主是没有办法了......

由于时间有限,博主是从模型的贴图进行优化的,以下两张图片,第一张是模型材质原贴图,

最大MaxSize是8192,内存大小42.7MB,一张贴图那么大,是不是很过分?博主发现模型同事给的材质贴图,法线贴图内存都好大,于是博主 改成了1024,图片内存瞬间变成了0.7MB。一张贴图减小那么多?那么整个场景呢?于是博主苦逼的开始了压缩图片的路程。。。。。。

最终打包出来原先2G多的webgl包,让博主压缩成了800MB的包。。。。。。

 

 方案2:这个是针对模型同事或者会maya  max的程序猿们,需要在maya max里对模型进行减面,减面过程可自行百度,博主本次优化没有进行模型减面,因为博主压缩图片之后就够用了。

4.webgl发布读取StreamingAssets文件夹里的配置文件

PS:由于Webgl不支持IO,所以不可以使用JsonConvert.SerializeObject将对象重新序列化,WebGL仅仅支持Unity自身的序列化,不支持外部的其他序列化方式。

在这里可以参考一下这位博主大大的方案,【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据 (taodudu.cc)本人参考了UnityWebRequest网络请求的方法,在这里博主使用的RestClient.Request的请求方式直接获取的streamingAssets里的配置文件,直接上代码:(博主有时间会写一份详细的webgl读取streamingAssets里的配置文件)

 public override void Awake()
    {
        base.Awake();

        string path = Path.Combine(Application.streamingAssetsPath, "configURL.txt");

        RestClient.Request(new RequestHelper
        {
            Method = "GET",
            Uri = path,
        }).Then(mresponse =>
        {
            Debug.LogError(mresponse.Text);



        }).Catch(err => { Debug.LogError("--------------" + err.Message); });
    }

希望对大家有所帮助,仅以此文记录博主的历程。

以下是博主自己研发的项目,包含XChart2.5.0    AVProVideo     AssetBundle打包工具   自定义字体

百度网盘:链接:https://pan.baidu.com/s/17_U76eNkvEpf-HzwuOKirA 
提取码:1234 
--来自百度网盘超级会员V5的分享

猜你喜欢

转载自blog.csdn.net/weixin_39348384/article/details/130809308
今日推荐