You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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(我们要通过代码控制播放时机)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:02:36