当前位置: 首页 > news >正文

UE4/UE5 Android 超大(视频)文件打包/防拷贝方案

案例

本例有一个超过8G的mp4视频文件需要播放。最初的做法是直接将mp4手动拷贝到指定的安卓目录下,然后利用MediaPlayer的OpenFile来打开对应路径的文件进行播放。好处在于,app与mp4是互相独立的,可以随时替换视频文件且apk文件大小不受视频文件的影响。

需求

视频文件是固定的,不会变更,但是需要防拷贝或拷贝后不能在非本应用内被正常播放。

方案一

将视频文件上传到云端,通过OpenUrl进行在线播放。但因为需要支持离线播放,因此该方案不做考虑。

方案二

还是通过app、mp4分离的方式,但是对本地mp4文件进行加密,UE端解密播放。
这个是否可行需进一步研究,若有朋友知晓,希望评论分享交流!!!

方案三 (本例采取的方案)

将视频文件直接打包进apk,并做加密处理。

需要解决的问题

基于UE或安卓的打包特性,对打包出来的包体大小有限制,以及视频文件在UE打包出来后可以很轻松的通过反编译/解包等方式找到。
本方案最终会涉及到apk、obb、pak三种类型包体文件,具体后面会提到。

到目前为止,最直接面临的问题如下:

1. 视频文件过大导致打包失败

在这里插入图片描述

2. 打包出来的mp4文件通过apk/obb解压后被找到

在这里插入图片描述
![(https://i-blog.csdnimg.cn/direct/656a727319bd4d068644884496f018a9.png)

3. 通过obb里的pak文件找到视频文件

OBB解压找到pak文件,pak通过UnrealPak.exe或其它工具解包找到mp4
obb解压找到pak
在这里插入图片描述

解决方案

废话不多说,直接给出解决步骤

1. 解决文件过大导致打包失败问题

从打包报错可以看出,obb文件不能超过4G,因此首先对8G多的视频文件做切割,切割成单个不超不超过4G的文件,我通过ffmpeg做的裁切:

ffmpeg -i input.mp4 -f segment -segment_time 350 -reset_timestamps 1 -c copy output%03d.mp4

在这里插入图片描述

允许large、patch、overflow OBB,以支持输出最大4G的OBB文件

在这里插入图片描述

2. 不将视频文件直接暴露在OBB中

启动pak、chunks,为后续做自定义资源分包以及加密用。在这里插入图片描述
在这里插入图片描述

不自动打包/拷贝视频文件,可以禁止打包出来后视频直接以原格式mp4拷贝到包里。
有可以为后面将视频文件打包进pak而避免重复拷贝。
在这里插入图片描述
我将三个视频文件放在Content/Videos目录下,将其添加为非UE资源文件夹打包到包里
在这里插入图片描述
到这里,直接打包的话所有的文件都会被打包进默认的主pak文件,该pak文件将会超过4G,放不进OBB。因此还是设法将三个视频文件单独打包进不同的pak。如下:
新建三个DataAsset
在这里插入图片描述
打开DataAsset,配置ChunkID,这个ID后面会用到。

在这里插入图片描述
上面这样配置DataAsset后,打包后会生成pakchunk10-Android_ASTC.pak文件,注意pakchunk10中的10对应的上面ChunkID.

【自定义资源分配规则】
Config文件夹内新建DefaultPakFileRules.ini文件,配置如下:

[MoviesToPak10]
OverridePaks="pakchunk10"
bOnlyChunkedBuilds=true
;List of file masks to apply to
+Files=".../output000.mp4"[MoviesToPak11]
OverridePaks="pakchunk11"
bOnlyChunkedBuilds=true
;List of file masks to apply to
+Files=".../output001.mp4"[MoviesToPak12]
OverridePaks="pakchunk12"
bOnlyChunkedBuilds=true
;List of file masks to apply to
+Files=".../output002.mp4"

这个配置的意思是将指定的output000.mp4文件打包进pakchunk10,同理output001.mp4、output002.mp4分别打包进去packchunk11、12的pak文件里。

至此我们成功的分别将三个将近4G的mp4分别打进了3个不同pak文件,这样pak再打进obb的时候就可以通过UE的自动分配打包到不同的OBB里,避开了单个OBB文件不允许超过4G的闲置。这也是需要允许large、patch、overflow OBB的原因。

参考:《UE5在资源打包配置上的BasePakFileRules.ini文件源码解读分析》

3.加密pak文件,防止从pak中提取视频文件

启用CryptoKeys插件:
在这里插入图片描述
加密配置:
在这里插入图片描述
加密后,常规手段就无法破解pak包了。
在这里插入图片描述
利用UE自带的加密方案,是否有被破解的风险,待进一步研究。
请参考:《UE4 Pak 加密与解密调研》

最终输出的包如下,总体大小为8、9G,理论上最大可以支持总大小不超过12G的包。
在这里插入图片描述

http://www.dtcms.com/a/321386.html

相关文章:

  • 【07】OpenCV C++实战篇——鼠标在图片上绘制矩形,计算矩形区域内灰度值的累加值显示在图片上,支持连续多次框选,快速计算结果,快速刷新画面不卡顿
  • Atto Round 1 (Codeforces Round 1041, Div. 1 + Div. 2) A-C
  • 【身心健康】能量管理——为你的情绪和身体注入积极力量
  • LVS高可靠
  • [激光原理与应用-184]:光学器件 - 光学器件中晶体的用途、分类、特性及示例
  • CSS--后端也有自己的CSS要学
  • 化工厂安全升级:分布式光纤传感的 “实时监测 + 精准预警” 方案
  • 【mongoose】E11000 duplicate key error collection: test.counters
  • [hot100]和为K的子数组-Python3
  • AI入门学习--RAG是什么?
  • TyDi QA:面向语言类型多样性的信息检索问答基准
  • Selenium + Python + Pytest + Yaml + POM
  • Java 大视界 -- 基于 Java 的大数据分布式计算在气象灾害数值模拟与预警中的应用(388)
  • 机器视觉的笔记本辅料贴合应用
  • camera人脸识别问题之二:【FFD】太阳逆光场景,人像模式后置打开美颜和滤镜,关闭heif拍摄格式对着人脸拍照,成像口红出现位置错误
  • 嵌入式系统GUI
  • 基于linux环境在centos7上部署gitlab
  • LLM驱动的数据分析组合(HoraeDB+Polars+Snorkel AI)
  • Transformer Encoder 与 Decoder:从结构到功能的深度解析
  • 【MATLAB技巧】打开脚本(m文件)后,中文乱码的解决方案
  • Spring Boot 核心原理
  • 【面向对象编程】从类到控件:面向对象思想的具象化演进
  • 进程关系与守护进程
  • 常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC
  • 全栈:如何判断自己应该下载哪个版本的Tomcat
  • PyQT+OpenCV实现一键抠图换背景:制作AI证件照精修工厂
  • IPC总结
  • Vue 服务端渲染(SSR)详解
  • 探索人类底层逻辑一致性的跨学科研究框架:建议、方法与展望
  • Android 缓存日志(Logcat)导出与分析全攻略