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




