UE的rtsp插件崩溃过程排查

2023-11-05

Part1前言

Invideo插件是一个UE5的rtsp视频播放插件,当然还可以播放主流的其他视频协议。其开源地址如下https://github.com/inveta/InVideo

3a8d1d5afff8edfc81e309f5648db67f.png

前段时间有网页反馈使用该插件进行播放视频的时候会有偶发程序崩溃。

53013bf9580fdbbeb946bed0e1040212.png

Part2问题排查

当看到留言之后,其实并没有什么排查思路。后续这位网友有加了我们qq技术交流群:681464378
给出了更加详细的信息描述。

a5cee981455095cb089735e6295cb8d6.jpeg

并且强调在大分辨率的情况下,崩溃的概率会高很多。而且主要集中在视频打开和关闭的时候。

接下来找到虚幻的源码发现崩溃在第一个checkf里面。这里校验了传入参数UpdataRegion。

60492c8c6d11e2ac9d53b2d701f0f5f4.jpeg

UpdataRegion这个参数类型是FUpdateTextureRegion2D,通过查看代码,发现是我们自己传入的。在UInVideoWidget::UpdateTextureRegions函数中调用ENQUEUE_RENDER_COMMAND传入到的渲染线程。
而传入的对象的值通过下面方法创建

m_VideoUpdateTextureRegion = new FUpdateTextureRegion2D(0, 0, 0, 0, m_VideoSize.X, m_VideoSize.Y);

通过比较我们创建时候的值和崩溃时候的值,我们发现明明我们初始化的值是0,但是在崩溃的时候,编程了一个非常大的值:-1861933592。这只能说明我们传入的对象被释放了,但是渲染线程还在使用。

我们释放的情况只有在执行视频关闭的时候,才会进行。相关代码在void UInVideoWidget::StopPlay()中进行。释放方法如下

if (nullptr != m_VideoUpdateTextureRegion) 
 { 
 delete m_VideoUpdateTextureRegion; 
 m_VideoUpdateTextureRegion = nullptr; 
 }

那么为什么我们把视频释放了,渲染线程还会继续渲染呢?
这是一个多线程问题,因为分辨率设置过大,导致gpu显卡性能下降,然后这个bug就出来了。在视频释放之后,渲染队列之前的任务还没有执行完成,之后就会使用已经释放的指针。分辨率低的时候,渲染线程性能好,不会有延迟,所以就不会出现。
后续修改程序将每次传递这个值从新new一个出来RegionData->Regions = new FUpdateTextureRegion2D(*Regions);再然后介绍之后再进行释放delete RegionData->Regions;

Part3后续反馈

按照这个思路修改之后,目前没有收到崩溃的问题。

b1e535deedbeb096b7398b7cf680b5cf.png

所以后续推荐使用V1.4版本 https://github.com/inveta/InVideo/releases/tag/V1.4

Part4总结

本文针对InVideo播放rtsp视频崩溃的bug进行了复盘并进行了修复。

206752105c81257f78e6f766de1af75c.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE的rtsp插件崩溃过程排查 的相关文章

  • UE4 解决当角色走到一个物体上时会被弹开的问题

    检查被踩物体的碰撞组件Collision那一栏的CanCharacterStepOn是否是Yes 如果不是请更改之 如果没效那就是其他的碰撞问题
  • 如何解决UE5重定向后丢失RootMotion

    解决方法如图所示
  • UE4 UE4 C++ Gameplay Abilities的GameplayCue

    UE4 UE4 C Gameplay Abilities的GameplayCue GAS参考文档 用GameplayCue 做一个玩家加血 buff效果 初始化 加血 加buff buff消失 加血的播放一个粒子特效 这个是用Gamepla
  • 虚幻4学习笔记(5)开关门、使用蓝图开关门、按键和鼠标点击开关门

    开关门 开关门 前置准备 单独设置开关门 设置时间轴 定义蓝图类 完成开关门 针对中心轴 在物体中心 不在右下角的调整方法 世界坐标轴 绝对坐标轴 不会改变 设置按键开关门 鼠标开关门 B站UP谌嘉诚课程 https www bilibil
  • 第二十五篇:UE4如何通过http方式请求接口Json数据

    本篇介绍UE4如何向接口请求数据并解析数据 首先我们需要用到两个插件VaRest和Json Blueprint 这两个插件都是免费的 在虚幻商城可以免费获取到 两个插件安装到UE4引擎之后 新建一个工程 开启这两个插件 记下来介绍两种接口请
  • UE4 UI实现改键功能

    主要内容 本文主要讲解如何在UI中实现自定义按键的功能类似于游戏中的改键操作 用到的是UE4自带的第三人称案例 因为第三人称自带了小白人和几个按键绑定就不用再手动去设置 实现步骤 1 创建两个UMG用来展示UI效果 1 创建WBP Key
  • ue中的经纬高转xyz的问题

    在ue中 做了个地球仪 发现经纬度转地心坐标系老是出问题 后来发现 是转ue时 x y坐标要互换 也对 因为在cesium for unreal中还有一系列ecef转ue的相关函数 即下面的代码中 xy需要互换 在ue中才能正常使用 偏心率
  • 11月8日 改良射线,蓝图 UE4斯坦福 学习笔记

    修改射线类型 更改了昨天的射线类型 void USInteractionComponent PrimaryInteract 射线 FHitResult FHit 碰撞体 FCollisionObjectQueryParams ObjectQ
  • UE4 命令工具打包

    用cmd进入UE4引擎的目录 Engine Build BatchFiles找到RunUAT bat cmd中输入以下命令 RunUAT BuildCookRun project F VidaUpdater VidaUpdater upro
  • UE5_创建C++项目报错

    UE官方VS安装推荐 https docs unrealengine com 4 26 en US ProductionPipelines DevelopmentSetup VisualStudioSetup UE5报错 A fatal e
  • UE4 UI界面

    在UE4中创建UI界面是创建一个widget 进去之后左上角是选择控件 找到直接拖上去 中间那个框代表的就是我们的屏幕 在button中打字也就是给button命名时需要在上面在拖一个text控件 更好的排版可以改变锚点 这四个就类似与边距
  • 第十七篇:Unity/UE4如何实现Cave空间(一)

    首先什么叫CAVE空间 CAVE是围绕着观察者具有多个图像画面的虚拟现实系统 多个投影面组成一个虚拟空间 理论上CAVE是基于计算机图形学把高分辨率的立体投影技术和三维计算机图形技术 音响技术 传感器技术等综合在一起 产生一个供多人使用的完
  • ue4_timeline时间轴

    1 给一个cube添加蓝图 需要修改的是z轴方向移动位置 将z轴传入时间轴 时间轴蓝图如下 z轴时间轴修改为 第一个节点 time 0 value 300 物体的z轴初始位置 第二个节点 time 1 value 600 z轴移动300个单
  • UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解 参考 AttributeSet是设置玩家属性的比如生命值 最大生命值 GameplayEffe
  • UE4 制作导出Content目录下某个文件夹内所有模型的六视图并将模型资源文件复制到指定文件夹的插件

    一 新建空白插件 在Bulid cs内加入两个模块 EditorSubsystem UnrealEd PublicDependencyModuleNames AddRange new string Core EditorSubsystem
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • UE4文字显示乱码“字字字字字字字字”的解决办法

    键盘win R 搜索fonts 2 滑到最底下右键复制 宋体常规简体字 3 复制到ue4项目的字体文件夹中 如下 注意在外部文件处复制 4 回到项目界面 此时右下角会有个弹窗提示是否确认导入 点击导入 然后会弹一个 字体样式导入选项 弹框
  • 【UE5.2】通过Water插件使物体漂浮在水面上

    效果 步骤 1 新建一个工程 创建一个Basic关卡 添加初学者内容包到内容浏览器 2 在插件中启用 Water 插件 然后重启工程 3 重启后提示 碰撞描述文件设置不包括水体碰撞描述文件的条目 水碰撞必须使用该描述文件才能正常工作 将条目
  • 【UE5】瞬移+马赛克过渡效果

    效果 步骤 1 新建一个工程 创建一个Basic关卡 2 添加第三人称游戏资源到内容浏览器 3 新建一个材质 这里命名为 M Pixel 打开 M Pixel 设置材质域为 后期处理 在材质图表中添加如下节点 此时效果如下 已经有马赛克的效
  • 【UE】制作地月全息投影

    效果 步骤 1 在必应国际版上搜索 purlin noise 下载如下所示图片 再搜索 Earth Map 下载如下所示图片 再搜索 Moon 360 下载如下所示图片 这三张图片的资源链接如下 链接 https pan baidu com

随机推荐

  • 【Unity】ScriptableObject的介绍

    Unity ScriptableObject的介绍 看了下ScriptableObject的一些介绍 最大的优势感受有三点 json 把数据真正存储在了资源文件中 能够像其余资源那样管理它 例如退出运行也同样会保持修改 能够在项目之间很好的
  • 爬虫框架Scrapy(12)爬取动态页面

    文章目录 爬取动态页面 一 Splash 渲染引擎 1 render html 端点 2 execute 端点 3 常用属性与方法 1 Splash 对象的属性 2 Splash 对象的方法 二 安装 Scrapy Scrapy 1 安装
  • Java集合框架及基本接口

    文章目录 Collection接口及迭代器 泛型方法的使用 集合基本接口和实现 List ArrayList LinkedList ListIterator接口和Iterable接口的区别 Set HashSet TreeSet Queue
  • 统计字符串中整数个数

    输入一个字符串 内有数字和非数字字符 例如 jh2515da555adad22 dsd55252aa 将其中连续数字作为一个整数 依次存放在 一组数a中 例如 2515放在a 0 555放在a 1 统计有多少个整数 并输出这些数 inclu
  • Python中的物体检测算法有哪些?

    人工智能技术在不断发展 物体检测技术在计算机领域也变得越来越重要 提到人工智能 一定少不了Python Python语言的应用范围也逐渐广泛 那么你知道Python物体检测技术是什么吗 以下是详细的内容 什么是物体检测技术 物体检测技术 顾
  • Android——recyclerview.adapter公共方法、类、接口的作用简述

    功能分类 公共内部接口 使用场景 数据绑定 onCreateViewHolder ViewGroup parent int viewType onBindViewHolder VH holder int position getItemCo
  • 排序——冒泡排序(Bubble sort)

    定义 冒泡排序是一种较简单的排序算法 它重复地走访过要排序的元素列 依次比较两个相邻的元素 如果顺序 如从大到小 首字母从Z到A 错误就把他们交换过来 走访元素的工作是重复地进行直到没有相邻元素需要交换 也就是说该元素列已经排序完成 这个算
  • 黑客/网络安全【零基础自学】

    一 为什么选择网络安全 这几年随着我国 国家网络空间安全战略 网络安全法 网络安全等级保护2 0 等一系列政策 法规 标准的持续落地 网络安全行业地位 薪资随之水涨船高 未来3 5年 是安全行业的黄金发展期 提前踏入行业 能享受行业发展红利
  • 如何建设一个安全运营中心(SOC)?

    然信息安全管理问题主要是个从上而下的问题 不能指望通过某一种工具来解决 但良好的安全技术基础架构能有效的推动和保障信息安全管理 随着国内行业IT应用度和信息安全管理水平的不断提高 企业对于安全管理的配套设施如安全运营中心 SOC 的要求也将
  • wifi协议_图解 802.11wifi协议

    微信公众号 卢同学关注可了解更多 若有问题或建议 请与本人联系或者公众号留言 如果你觉得此文对你有帮助 欢迎赞赏 目录 凡事若能综观形势 通常有助于细节的进一步探究 从OSI七层模型来看 802规范的重心放在OSI模型最下面的两层 即数据链
  • Python爬虫入门7:HTML报文解析获取网页基本信息

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 BeautifulSoup是三方模块bs4中提供的进行HTML解析的类 可以认为是一个HTML解析工具箱 对HTML报文中的标签具有比较
  • wrieshark 抓包图解 MSDU AMSDU MPDU AMPDU 的区别

    区分这几种帧格式明确 802 3 和 802 11 两种帧格式即可 MSDU 首先 MSDU 是802 3的帧格式 从以太口发出去的帧都是MSDU格式的 A MSDU AMSDU 是把几个MSDU 聚合在一起并从以太网口发出去的帧 MPDU
  • 性能测试流程

    目 录 一 文档介绍 3 1 1文档目的 3 1 2适用对象 3 二 性能测试简介 3 2 1 性能测试概念 3 2 2 常用性能指标 4 2 3常用性能测试工具 5 三 性能测试流程 6 3 1 性能测试流程图 6 3 2 性能测试流程详
  • APScheduler 源码阅读(二) job

    趁热打铁 学习一下 APScheduler 的 python 的源码 很好奇任务调度控制的实现 分析源码主要还是针对 APScheduler 下的几个关键的模块 events 事件 executors 执行器 job 任务 jobstore
  • libcaffe Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Input (known types: )

    在用libcaffe lib建立工程时 出现 Check failed registry count type 1 0 vs 1 Unknown layer type Input known types 错误 参考了两篇博文解决问题 主要思
  • warning: ignoring JAVA_HOME=D:\JDK; using bundled JDK报错解决

    warning ignoring JAVA HOME D JDK using bundled JDK报错原因是因为你JDK版本太低或者你的ElasticSearch版本太高降低版本即可 我的是JDK1 8我下载的是elasticsearch
  • 八皇后问题--回溯

    在刘汝佳老师的书中对于8皇后问题的分析 我感觉非常经典 8皇后问题可行的解 92个 回溯的定义 当把问题分解成若干的步骤并递归的求解时候 如果当前步骤没有合法的选择 则函数将返回上一级递归调用 这种现象称为回溯 这是这个原因 递归枚举算法常
  • uniapp 保存二维码到本地,如果不是本地图片需要先下载后保存。

    如果二维码不是固定的 是线上的就需要先去下载 baocuns 保存二维码 let that this uni showLoading title 保存中 uni downloadFile 先下载网络图片 转为临时路径图片 url that
  • 进制转换C语言实现(十进制转换为任意进制)

    程序实现功能 输入一个十进制数和R 表示要转换成R进制 输出转换后的数 事例 例如 输入 10 2 输出 1010 源代码如下 include
  • UE的rtsp插件崩溃过程排查

    Part1前言 Invideo插件是一个UE5的rtsp视频播放插件 当然还可以播放主流的其他视频协议 其开源地址如下https github com inveta InVideo 前段时间有网页反馈使用该插件进行播放视频的时候会有偶发程序