qq_54105965 2022-11-30 17:06 采纳率: 0%
浏览 85
已结题

Unity 使用UMP造成CPU和内存占用过高

问题遇到的现象和发生背景

Unity 使用UMP插件多路播放视频,因为有切换RTSP流播放的需求,频繁切换下,CPU和内存占用爆炸,具体操作如下:
左边是一个摄像机列表,右边是九屏幕的播放器

img

实际上九屏幕播放器就是九个UMP插件预制体组成的播放器,已经预置好了

img

用代码块功能插入代码,请勿粘贴截图

这是单击播放器切换话画面的代码
单击播放器,会把自己选择的rtsp流给UMP播放器的path属性,然后play()

             //单击播放器,会把自己选择的rtsp流给UMP播放器的path属性,然后play()
           if (rtsp != "" && rtsp != null)
            {
                OnClikeButton.GetComponentInChildren<UniversalMediaPlayer>().Path = rtsp;
                //播放
                OnClikeButton.GetComponentInChildren<UniversalMediaPlayer>().Play();
                OnClikeButton.transform.Find("Txt").GetComponent<Text>().text = information;
            }

这是双击之后,隐藏其他所有播放器,放大这个播放器的代码,以及放大之后再双击缩小的代码
除了被双击放大的播放器,其他的播放器直接SetActive(false),有正在播放的rtsp地址,就保存起来

                //除了被双击放大的播放器,其他的播放器直接SetActive(false),有正在播放的rtsp地址,就保存起来。
                if (item.Value.GetComponentInChildren<UniversalMediaPlayer>().Path!=""&& item.Value.GetComponentInChildren<UniversalMediaPlayer>().Path != null)
                {
                    RtspList[item.Key].substream = item.Value.GetComponentInChildren<UniversalMediaPlayer>().Path;
                }
                item.Value.SetActive(false);

当被放大的播放器缩小,其他播放器SetActive(true),并把保存的rtsp地址重新赋值并play

                item.Value.SetActive(true);
                foreach (var item1 in RtspList)
                {
                    if (item.Key == item1.Key && item1.Value!=null)
                    {
                       
                        item.Value.GetComponentInChildren<UniversalMediaPlayer>().Path = item1.Value.substream;
                        item.Value.GetComponentInChildren<UniversalMediaPlayer>().Play();
                    }

                }

运行结果及报错内容

当我在摄像机列表选择了一个画面放到九屏幕播放器里面播放,把九个画面填满,cpu占用极高

img

当我反复执行的放大一个画面隐藏其他画面,亦或频繁的给其中一个播放器重新替换画面,实际上都是频繁切换rtsp地址的操作,导致了CPU爆炸

img


放大效果图

img


缩小效果图

img

我的解答思路和尝试过的方法

之所以这样,我个人猜测可能是频繁的,或者密集的建立TCP通道和断开TCP通道造成的紊乱,和TCP通道无法及时断开造成的
我尝试过先stop再play,那样效果更差。
画面之所以这么模糊是我将主码流切换为辅码流,否则,连9屏幕的画面都支撑不了
也试过赋值的时候略微给一些延迟,效果依然不是很理想

我想要达到的结果

解决在unity平台多路播放rtsp流CPU占用过高和频繁切换rtsp流CPU占用爆炸的问题

  • 写回答

4条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 12月8日
      • 创建了问题 11月30日

      悬赏问题

      • ¥20 Django网页部署到服务器后不能post请求
      • ¥15 编写java代码,拷贝特定包下的文件到指定路径,禁止使用IO流读写操作
      • ¥50 pyinstaller 打包问题
      • ¥15 无法使用cnssc调取网页数据
      • ¥15 Pycharm安装en_core_web_sm失败出现Could not find a version that satisfies the requirement spacy报错
      • ¥15 Python社区划分
      • ¥15 mrcp发现语音丢包
      • ¥15 vue3如何改变svg字体大小,以及子组件如何改变父组件背景色
      • ¥15 ABAQUS简单的带传动系统运转不了
      • ¥15 关于git actions自动部署的问题