Unity自带的Video Player与MediaPlayer的使用与区别

本文介绍如何使用Unity内置的VideoPlayer组件及MediaPlayer插件播放视频。包括视频加载、显示及优化等步骤,还讨论了视频全屏展示的方法及解决视频切换过程中的黑帧问题。

资源名AVPro Video 1.10
首先介绍一下unity自带的播放器Video Player
要把大象装进冰箱需要几步
首先创建一个新的工程并创建好canvas与videoplayer
在这里插入图片描述
第二步:在文件夹内创建一个存储视频图像的文件
在这里插入图片描述
第三步把创建出来的图片存储赋给视频面板并把Source属性调整为绝对路径URL寻找到你的视频在此值得一提的是在工程内StreamingAssets这个文件夹需要自己创建他的作用在于你打包程序后这个文件夹的内容不被编码从而可以从外部替换
在这里插入图片描述
在canvas内创建一个Rawimage并把创建过存储视频的Texture赋给Rawimage中Texture属性此时他的运行效果是这样的
在这里插入图片描述
由于我们需要全屏展示 所以需要对存储的Texture进行设置成全屏的分辨率 我们就手动调吧把默认的256改成对应需要的分辨率 我这里就全屏了1920*1080
在这里插入图片描述
在Rawimage也要更新他的图像显示大小
在这里插入图片描述
此时的运行效果就是这样了
在这里插入图片描述
如果不更改Texture直接更改Rawimage的尺寸或者scale会导致图片丢失像素点最终效果就是看不清
如不运行这个Rawimage会存储最后一次播放的图片的画面 这里需要自己用代码进行优化清除图片缓存具体的我就不写了 提供一个思路 他的优点在于视频切换视频时不存在黑帧可以实现完美切换
接下来说道MediaPlayer视频插件 他的优势在于可以做3D透明背景的效果我这里展示一下
原视频效果
在这里插入图片描述
实际显示效果
在这里插入图片描述
具体实现需要拥有透明通道的左右或上下视频实现
并再插件内进行处理最终实现的效果就是这样 其缺点在于切换视频的过程中存在黑帧

<think>我收到用户的查询:关于UnityVideoPlayer组件在Android设备上如何正确设置URL。用户引用了几个内容,但我需要专注于目录路径的问题。用户提到的引用[1]讨论了MediaPlayer.Play()的使用,强调播放路径切换时的顺序。引用[2]演示了从StreamingAssets加载视频,展示了RawImage和VideoPlayer的设置方式。引用[3]则涉及EasyAR的截图录像功能,但对当前问题关联不大。核心问题是Android目录的URL格式。在Unity中,VideoPlayer可以通过URL加载视频文件,而Android设备上有几种常见目录。首先是StreamingAssets路径:这个目录在安装时被复制到APK中,且只读。从Android文件系统访问需要使用特殊路径。我回忆Unity文档,路径应为"file://"+Application.streamingAssetsPath+"/filename"。对于视频文件,必须加上扩展名,因为默认不会识别。接着是PersistentDataPath:这是可写目录,类似应用私有存储。用户提到的URL写法类似,但要确保文件存在于此目录。路径格式为"file://"+Application.persistentDataPath+"/file"。用户引用中强调MediaPlayer.Play()必须紧随URL设置,否则可能出错。引用[2]的例子直接指定了URL并调用Play,这验证了正确顺序。我还需考虑用户可能的场景:视频是否打包在APK中StreamingAssets,或是下载到PersistentDataPath。根据位置不同,路径写法一致但根目录变化。最后,组织回答结构:先分StreamingAssets和PersistentDataPath场景,给出URL格式示例,强调正确调用顺序。准备相关问题引导进一步学习。</think> 在Unity使用`VideoPlayer`组件加载Android设备上的视频文件时,URL路径需根据文件存储位置采用特定格式,以下是核心写法和注意事项: --- ### **1. StreamingAssets目录(只读路径)** 适用于安装时打包的视频文件。 **URL格式**: ```csharp string url = Application.streamingAssetsPath + "/video.mp4"; // Android系统需添加"file://"前缀 VideoPlayer videoPlayer = GetComponent<VideoPlayer>(); videoPlayer.url = "file://" + url; videoPlayer.Prepare(); // 准备资源 ``` #### **关键点**: - `file://`是Android访问本地文件的必要协议头[^2] - 文件扩展名(如`.mp4`)需明确指定 - 调用`Prepare()`后需监听`prepareCompleted`事件再执行`Play()`: ```csharp videoPlayer.prepareCompleted += (source) => videoPlayer.Play(); ``` --- ### **2. PersistentDataPath目录(读写路径)** 适用于运行时下载或生成的视频文件。 **URL格式**: ```csharp string url = "file://" + Application.persistentDataPath + "/downloaded_video.mp4"; videoPlayer.url = url; ``` #### **关键点**: - 此路径可读写,文件需通过代码预先复制至此(如用`File.Copy()`) - 同样需要`file://`协议头[^1] --- ### **3. 注意事项** 1. **路径大小写敏感**: Android文件系统区分大小写,确保路径文件名完全匹配 2. **硬解码兼容性**: 优先使用`.mp4`(H.264编码)或`.webm`格式 3. **播放状态管理**: 切换视频前须先调用`videoPlayer.Stop()`,否则可能触发进度计算错误[^1] ```csharp videoPlayer.Stop(); // 必须停止当前播放 videoPlayer.url = newUrl; videoPlayer.Play(); ``` --- ### **代码示例(完整流程)** ```csharp public void LoadVideo(string fileName){ VideoPlayer videoPlayer = GetComponent<VideoPlayer>(); // 1. 停止当前播放 videoPlayer.Stop(); // 2. 构造StreamingAssets路径 string path = "file://" + Application.streamingAssetsPath + "/" + fileName; // 3. 设置URL并准备 videoPlayer.url = path; videoPlayer.Prepare(); // 4. 准备完成后播放 videoPlayer.prepareCompleted += (source) => { videoPlayer.Play(); }; } ``` > ⚠️ **测试建议**:真机测试时若视频黑屏,检查: > - 文件是否实际存在(用`System.IO.File.Exists()`验证路径) > - 视频编码是否支持(建议用`FFmpeg`转H.264基准配置) ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值