Part1前言

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

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

Part2问题排查

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

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

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

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后续反馈

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

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

Part4总结

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

UE的rtsp插件崩溃过程排查相关推荐

  1. 崩溃重启_semi-sync插件崩溃导致MySQL重启的故障分析-爱可生

    起因: 测试公司的保障MySQL高可用组件时发现一个异常. 停止从库,高可用组件将从库自动启动后,主库发生重启.而正常情况下主库不应发生重启. 环境: OS: CentOS release 6.7 ( ...

  2. vscode编写插件详细过程

    vscode编写插件详细过程 前言 之前编写了一个vscode插件用vscode写博客和发布,然后有园友要求写一篇来介绍如何开发一个vscode扩展插件,或者说介绍开发这个插件的过程.然而文章还没有写 ...

  3. 海康视频插件启动过程中出现跨域问题has been blocked by CORS policy

    海康视频插件启动过程中出现反复启动 控制台报错:has been blocked by CORS policy: The request client is not a secure context ...

  4. live555 学习笔记-建立RTSP连接的过程(RTSP服务器端)

    live555 学习笔记-建立RTSP连接的过程(RTSP服务器端) 监听 创建rtsp server,rtspserver的构造函数中,创建监听socket,添加到调度管理器BasicTaskSch ...

  5. islide插件安装过程闪退

    islide插件安装过程闪退 iSlide是一款基于PowerPoint的插件工具,能够兼容office. 问题 在安装过程中闪退了,打开菜单时又发现安装完成,但是在office2019的PPT选项中 ...

  6. Excel催化剂插件安装过程升级,离线版全网公开下载!

    Exce催化剂推出近2年,之前一直在推崇在线版的安装方式,但因安装步骤较多,可能吓退了一部分初级用户,此轮重新梳理,让安装方式更简单,也公开了离线版的安装文件,若部分用户不想使用在线版,亦可转到离线版 ...

  7. IE加载OCX插件崩溃原因之栈溢出问题

    最近遇到一个问题,一个部门的同事提供的dll库使用栈内存较大,我这边使用VS2013控制台程序测试时出现崩溃. 崩溃原因是栈内存不够用导致,于是我将vs的栈保留大小设置为100M,然后就可以了. 现在 ...

  8. 已有项目依赖cordovaLib打包后调用插件崩溃问题

    已有项目为完成某些需求依赖了cordovaLib,我们项目是直接把cordovaLib打成jar包加进项目里,增加了一些cordova的插件,项目运行正常,但是打包后出现被调用的插件找不到相关类的问题 ...

  9. NDD(notepad--)的AI机器人插件制作过程

    兴趣是最好的老师.周末晚上熬夜到半夜十二点多,花了几个钟头给NDD制作了一款AI搜索问答插件,时间仓促界面较丑,后续插件代码开源并维护和美化.Notepad记事本工具挺常用的,把AI接口接入进来使用起 ...

最新文章

  1. matlab contour光滑,使用Matplotlib在Contour Plot中平滑数据
  2. 记一次大规模数据迁移和加密
  3. python 帮助文档、自我解释
  4. ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较)
  5. *CTF MineGame
  6. 【mongodb环境】在ubuntu上搭建mongodb,并且开启远程连接
  7. Appium1.9 之 Chromedriver安装方式
  8. 《MySQL必知必会》笔记--数据库基础
  9. SAP JCo的Server/Client编程实例
  10. 初学Docker容器网络不得不看的学习笔记
  11. #define c# 报错_c语言中#define的用法
  12. 频率和概率、平均值和期望值
  13. 协同过滤算法(天池竞赛试题)
  14. openlayers5学习笔记-map事件(moveend)
  15. python config方法_Python config.Configuration方法代码示例
  16. 数据结构练习题【哈夫曼树、图、排序、散列表】
  17. Flutter实现京东淘宝电商商品详情页效果
  18. 洛谷 P4720 【模板】扩展卢卡斯定理/exLucas
  19. refind引导的win10+ubuntu18.04开机启动
  20. oracle中的列在此处不,为什么列在此处不允许?

热门文章

  1. SSO方式实现微服务的登入业务
  2. 阿桑奇,真正的网络英雄!
  3. 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——3.2 ZigBee...
  4. 聚划算加码“百亿补贴”背后,不仅仅是为了下沉
  5. 面试官:你了解大厂的接口设计原则么?就会curd的我当场自闭
  6. 手把手带你YOLOv5 (v6.1)添加注意力机制(二)(在C3模块中加入注意力机制)
  7. GMT6.1.1安装流程
  8. echarts 水球示例
  9. 杭电4510—小Q系列故事—为什么时光不能倒流
  10. 国际象棋电子棋盘大盘点