【UE5】动态播放媒体

最近项目中有一个需求,需要将场景中的42块屏幕都显示媒体内容,想着如果每一块屏幕都创建一个MediaPlayer资产、一个MediaSource资产、一个MediaTexture资产及创建对应的Material,就是4*42=168个资产需要维护了,所以想着就全部采用动态创建,动态管理的办法维护,其中碰到了一些问题,在此记录一下。

动态创建媒体之后播放不显示内容

首先看一下动态创建媒体资产,并播放的蓝图:

这里我播放的都是本地视频文件,所以采用FileMediaSource资产,构造了MediaSource、MediaPlayer和MediaTexture之后需要为MediaTexture设定对应的MediaPlayer,然后创建DynamicMaterialInstance,并为将MediaTexture设置到动态材质的贴图参数上,最后将材质设置到对应Mesh的材质插槽,整个流程就结束了,之后就可以通过MediaPlayer进行OpenSource,Play和Pause了。需要注意的是,在创建动态材质时,需要提供一个父材质,并且材质的贴图要设置为材质参数,以便可以使用蓝图动态的设置贴图。

这里碰到了第一个问题,就是一切都构建好之后,使用MediaPlayer播放视频时,MediaPlayer显示播放是成功的,但是视频却并没有播放,这是因为在为MediaTexture设置MediaPlayer之后,没有更新贴图资源,需要在MediaTexture更新了内容时,使用UpdateResource节点刷新贴图的资源。然后就可以正常播放视频了。

在这里插入图片描述

设置媒体音量后部分媒体不显示内容

视频成功播放后就遇到了第二个问题,视频播放没有声音,这个好办,给屏幕蓝图添加一个MediaSoundComponent组件,然后为组件设置对应的MediaPlayer,这样在播放视频时,就有声音了。但是我这里有一个需求就是,这42块屏的视频内容不能都同时播放,不然场景中的声音将非常混乱,所以我需要在OpenSource之后将所有的MediaPlayer都使用Pause暂停,但是我不能OpenSource之后立刻就Pause,这样的话,场景中的屏幕内容将是一片黑,我需要显示一点视频内容到屏幕上,所以在OpenSource之后我需要播放个1-2秒然后再Pause,但是这段时间不能播放声音,所以这段时间需要将所有的MediaSoundComponent静音,其实说了那么多,目的就是要先将所有视频静音,然后再将音量调回来。视频静音的方式也很简单,使用MediaSoundCompoent组件的SetVolumeMultiplier节点即可,到这一步,第二个问题就出来了,当我使用组件设置了静音之后,场景中的部分屏幕开始不显示内容了,所有资产都正常,只有MediaTexture没有更新视频内容,将SetVolumeMultiplier节点断掉,所有屏幕又会正常显示内容,在UE的论坛逛了一下,据说是UE5的一个并发的bug,具体什么原因我没有深究,我采用了动态添加组件的方式规避了这个问题:


在构造完媒体资产之后,在使用AddComponentByClass节点动态为屏幕蓝图创建MediaSoundComponent组件,并动态的为组件设置MediaPlayer,这样就可以使用SetVolumeMultiplier设置媒体音量而不影响内容显示了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何看待Agent AI智能体的未来

Agent AI智能体的未来 Agent AI智能体,也称为自主代理或智能代理,是指能够自主执行任务、与环境交互并作出决策的计算机程序或系统。这些智能体通常具备学习、适应和推理的能力,能够在复杂和不确定的环境中执行任务。随着技术的进步&#xf…

【OC和红移的双面材质】

OC和红移的双面材质 2021-12-23 18:36 rs oc 评论(0)

TiDB 利用binlog 恢复-反解析binlog

我们知道TiDB的binlog记录了所有已经执行成功的dml语句,类似mysql binlog row模式 ,TiDB官方也提供了reparo可以进行解析binlog,如下所示: [2024/04/26 20:58:02.136 08:00] [INFO] [config.go:153] ["Parsed start TSO"] [ts449…

Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的?

Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的? 1. tcpdump抓包架构2. BPF介绍3. 从内核层面看tcpdump抓包流程3.1. 创建socket套接字3.2. 挂载BPF程序 4. 网络收包抓取5. 网络发包抓取6. 疑问和思考6.1 tcpdump抓包跟网卡、内核之间的顺序…

golang beego结合wire依赖注入及自动路由

1 安装wire 1.1 通过命令直接安装 go install github.com/google/wire/cmd/wirelatest 1.2 通过go get方式安装 go get github.com/google/wire/cmd/wire进入目录编译 cd C:\Users\leell\go\pkg\mod\github.com\google\wirev0.6.0\cmd\wire go build 然后将wire.exe移动到…

C++中list的使用

文章目录 一、 list简介二、 构造函数1. 默认构造函数2. 拷贝构造3. 迭代器区间初始化4. 插入n个值为x的数据5. 代码示例 三、 容量和元素访问1. empty()2. size()3. max_size()3. back()4. front()5. 代码示例 四、 增删查改1. push_back()2. push_front()3. emplace_back()4.…

设计模式之装饰者模式DecoratorPattern(四)

一、模板模式介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中…

d16(149-153)-勇敢开始Java,咖啡拯救人生

跳过了p151 四小时的讲题我不敢听:) Stream Stream流,是JDK8后新增的API,可以用于操作集合或者数组的数据 优势:大量结合了Lambda的语法风格,该方式更强大更简单,代码简洁,可读性好 常用方法 …

Mycat(三)读写分离双主双从

文章目录 搭建双主双从双主机配置双从机配置双从配置两个主机互相复制停止从服务复制功能重新配置主从 修改 Mycat 的集群配置实现多种主从双主双从集群角色划分增加两个数据源修改集群配置文件读写分离配置扩展(1)读写分离(一主一从,无备)(m是主,s是从)…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面,使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路:修改Grafana配…

刷机维修进阶教程-----红米note7 修复基带 更改参数 nv损坏故障 实例步骤操作解析

在前面的博文中我有说过。不管刷更改参数还是修复基带,尽可能的情况下备份一些主要分区,上期讲了小米6x 小米5 小米6这些机型更改参数的具体步骤。今天的教程以红米note7为例解析下改参数和修复nv损坏的具体步骤,两者操作实际没有什么冲突。有兴趣的友友建议多看下我关于…

10G MAC层设计系列-(2)MAC RX模块

一、概述 MAC RX模块的需要进行解码、对齐、CRC校验。 因为在空闲的时候10G PCS/PMA会一直向外吐空闲符(x07)所以需要根据开始符、结束符将有效数据从码流中截取,也就是解码。 因为开始字符的所在位置有两种形式,而结束字符的位…

大数据学习笔记14-Hive基础2

一、数据字段类型 数据类型 :LanguageManual Types - Apache Hive - Apache Software Foundation 基本数据类型 数值相关类型 整数 tinyint smallint int bigint 小数 float double decimal 精度最高 日期类型 date 日期 timestamps 日期时间 字符串类型 s…

UE C++ 链表

目录 概要单链表双向链表头插入尾插入中间插入删除查找 小结 概要 链表 简单说明,链表有单链表,双向链表,循环链表(本篇文章以UE c代码说明)。链表的操作,插入,删除,查找。插入,删除效率高&…

练习题(2024/4/29)

在深度优先遍历中:有三个顺序,前中后序遍历 这里前中后,其实指的就是中间节点的遍历顺序,只要记住 前中后序指的就是中间节点的位置就可以了。 如图 1二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http测试板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http测试板块) 一、使用Http网页界面1、main.cc原码和index.html原码2、运行结果(1)测试结果1:用index.html内部的代码(2&#xf…

《HelloGitHub》第 97 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

win下vscode的vim切换模式的中英文切换

问题描述 在vscode中安装vim插件后,如果insert模式下完成输入后,在中文输入方式下按esc会发生无效输入,需要手动切换到英文。 解决方法 下载完成vscode并在其中配置vim插件下载github—im-select.exe插件(注意很多博文中的gitcod…

Microsoft Threat Modeling Tool 使用(二)

主界面 翻译 详细描述 选择了 “SDL TM Knowledge Base (Core)” 模板并打开了一个新的威胁模型。这个界面主要用于绘制数据流图(Data Flow Diagram, DFD),它帮助您可视化系统的组成部分和它们之间的交互。以下是界面中各个部分的功能介绍&a…

软件设计师-重点的行为型设计模式

一、命令模式(Command): 意图:(上午题) 将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 结构…
最新文章