Unity中从服务器加载视频至Raw Image组件失败问题求助
问题分析与解决方案
你遇到的核心问题是用加载图片纹理的API去处理视频资源,这完全不符合Unity处理视频的逻辑——UnityWebRequest.GetTexture()只能解析静态图片(比如PNG/JPG)为Texture2D,而MP4是视频流,需要用VideoPlayer组件来处理。哪怕你已经添加了VideoPlayer,之前的代码逻辑也没正确利用它。
你的Unity版本2019.4.26f1是LTS稳定版本,对VideoPlayer的远程视频支持是完善的,版本不是问题根源,下面是具体的修复步骤:
1. 先确认场景配置正确
确保RawImage和VideoPlayer的关联逻辑没问题:
- 创建一个
RenderTexture(右键菜单→Render Texture),设置和你的RawImage匹配的分辨率。 - 把这个RenderTexture赋值给RawImage组件的
Texture字段。 - 给挂载Demo脚本的对象添加
VideoPlayer组件:- 将Render Mode设置为
Render Texture。 - 在
Target Texture字段拖入刚才创建的RenderTexture。 - 取消勾选
Play On Awake(我们要通过代码控制播放时机)。
- 将Render Mode设置为
2. 修改代码逻辑,用VideoPlayer加载远程视频
替换你原来的GetVideo协程,改为直接通过VideoPlayer加载远程URL,这是最简洁的实现方式:
using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; using UnityEngine.Video; using System.Collections; // Json data format /* { "Name" : "...", "VideoURL" : "..." } */ public struct Data { public string Name ; public string VideoURL ; } public class Demo : MonoBehaviour { [SerializeField] Text uiNameText ; [SerializeField] RawImage uiRawImage ; [SerializeField] VideoPlayer videoPlayer; // 新增:拖入你的VideoPlayer组件 string jsonURL = "https://myserver..."; void Start () { StartCoroutine (GetData (jsonURL)) ; } IEnumerator GetData (string url) { using (UnityWebRequest request = UnityWebRequest.Get (url)) { yield return request.SendWebRequest() ; if (request.isNetworkError || request.isHttpError) { Debug.LogError($"加载JSON失败:{request.error}"); } else { Data data = JsonUtility.FromJson<Data> (request.downloadHandler.text) ; uiNameText.text = data.Name ; // 调用视频加载逻辑 StartCoroutine(LoadAndPlayVideo(data.VideoURL)); } } } IEnumerator LoadAndPlayVideo(string videoUrl) { // 设置VideoPlayer的远程视频地址 videoPlayer.url = videoUrl; // 开始准备视频资源 videoPlayer.Prepare(); // 等待视频准备完成(加载解码资源) while (!videoPlayer.isPrepared) { yield return null; } // 准备完成后自动播放 videoPlayer.Play(); Debug.Log("视频开始播放"); } }
额外注意事项
- 如果遇到视频加载失败,检查Azure存储的CORS设置:需要添加Unity编辑器/游戏运行环境的域名,允许
GET请求,避免跨域限制。 - 2019.4版本的VideoPlayer对MP4编码有要求,确保你的视频是H.264视频编码+AAC音频编码(Unity官方推荐的兼容格式)。
- 优先在真机上测试,编辑器的视频播放可能存在少量平台差异。
内容的提问来源于stack exchange,提问作者Bolino
相关产品推荐
相关产品推荐

