You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Unity WebGL上传LMS后无法加载本地视频,报Not allowed to load local resource错误

解决Unity WebGL上传LMS后本地视频无法播放的问题

咱们先拆解一下你遇到的问题根源:

sindex.html:1 Not allowed to load local resource: file:///D://Rosen8x8/Assets/Kabini/RosenVideo.mp4

这个错误本质是浏览器的安全沙箱限制:当你把WebGL构建上传到LMS后,网页是从LMS的服务器加载的,属于远程网页上下文,浏览器绝对不允许远程网页访问你的本地文件系统(file://协议的资源)——哪怕你本地Edge直接打开index.html能正常播放,那是因为本地文件的安全限制更宽松,但到了服务器环境就完全不一样了。

而且你不能把视频上传到外部服务器,那核心思路就是把视频和WebGL构建包打包在一起,用相对路径访问,而不是依赖本地绝对路径,具体步骤如下:

1. 将视频放入Unity的StreamingAssets文件夹

  • 在你的Unity项目里新建一个StreamingAssets文件夹(路径必须是Assets/StreamingAssets,Unity会识别这个特殊目录)
  • RosenVideo.mp4移动到这个文件夹里

2. 修正视频播放器的URL设置

  • 在Unity检视器中,把视频播放器的URL从本地绝对路径file:///D://Rosen8x8/Assets/Kabini/RosenVideo.mp4改成相对路径StreamingAssets/RosenVideo.mp4
  • 这样Unity在构建WebGL时,会自动把StreamingAssets里的视频打包到构建产物中,部署到LMS后就能通过相对路径访问了

3. 动态加载的代码适配(如果需要)

如果你是通过代码动态设置视频路径,记得用Application.streamingAssetsPath来获取正确的路径,WebGL下这个API会自动转换成符合服务器环境的相对URL,示例代码如下:

using UnityEngine;
using UnityEngine.Video;

public class LocalVideoLoader : MonoBehaviour
{
    [SerializeField] private VideoPlayer targetVideoPlayer;

    void Start()
    {
        string videoFilePath = System.IO.Path.Combine(Application.streamingAssetsPath, "RosenVideo.mp4");
        
        // WebGL环境下需要去掉file://前缀,因为构建后是相对路径
        #if UNITY_WEBGL && !UNITY_EDITOR
        videoFilePath = videoFilePath.Replace("file://", string.Empty);
        #endif
        
        targetVideoPlayer.url = videoFilePath;
        targetVideoPlayer.Play();
    }
}

4. 提前验证构建效果

构建完成后,不要直接双击打开index.html,而是用本地服务器模拟LMS环境测试:

  • 可以用Unity自带的WebGL本地服务器(构建后点击Run按钮)
  • 或者用Python的简单服务器:打开命令行进入构建文件夹,执行python -m http.server 8080,然后在浏览器访问http://localhost:8080

这样能提前验证视频是否能正常播放,避免上传到LMS后再踩坑。

内容的提问来源于stack exchange,提问作者Sanam

火山引擎 最新活动