Unity跨平台教育APP:使用VideoPlayer在线播放YouTube视频遇阻求解
解决Unity VideoPlayer播放YouTube视频的问题
核心原因
YouTube不会直接暴露视频的MP4资源链接,你拿到的页面链接是网页入口而非流媒体地址,因此直接添加.mp4后缀完全无效。
可行解决方案
1. 通过YouTube Data API获取流媒体链接
你需要先申请YouTube Data API密钥,调用API接口获取对应视频的流媒体播放地址,再传入Unity VideoPlayer播放:
步骤:
- 前往Google开发者平台创建项目并启用YouTube Data API v3,获取API密钥
- 调用
https://www.googleapis.com/youtube/v3/videos?id={视频ID}&key={你的API密钥}&part=player,contentDetails接口,解析返回的JSON数据,提取适配的流媒体URL(通常是player.embedHtml中的src地址) - 将获取到的流媒体URL赋值给
VideoPlayer.url属性
简单C#示例代码:
using UnityEngine; using UnityEngine.Networking; using System.Collections; public class YouTubeVideoPlayer : MonoBehaviour { public VideoPlayer videoPlayer; public string youtubeVideoId; public string apiKey; void Start() { StartCoroutine(GetYouTubeStreamUrl()); } IEnumerator GetYouTubeStreamUrl() { string apiUrl = $"https://www.googleapis.com/youtube/v3/videos?id={youtubeVideoId}&key={apiKey}&part=player"; using (UnityWebRequest webRequest = UnityWebRequest.Get(apiUrl)) { yield return webRequest.SendWebRequest(); if (webRequest.result != UnityWebRequest.Result.Success) { Debug.LogError(webRequest.error); } else { string responseText = webRequest.downloadHandler.text; string embedUrl = ExtractEmbedUrl(responseText); videoPlayer.url = embedUrl; videoPlayer.Play(); } } } string ExtractEmbedUrl(string json) { int startIndex = json.IndexOf("src=\"") + 5; int endIndex = json.IndexOf("\"", startIndex); return json.Substring(startIndex, endIndex - startIndex); } }
2. 使用第三方Unity插件
市面上有专门适配Unity的YouTube播放插件,这类插件内部封装了YouTube流的获取逻辑,你只需传入视频ID即可快速实现播放,无需自己处理API调用和JSON解析,同时兼容跨平台(iOS/Android/PC等)。注意选择合规的插件,确保符合YouTube服务条款。
注意事项
- 确保Unity项目开启了
Internet权限(在Player Settings中设置) - Android平台需要在Manifest中添加网络权限,iOS平台需配置ATS以允许HTTPS请求
- 严格遵守YouTube的服务条款,不得通过非授权方式获取或播放视频内容
内容的提问来源于stack exchange,提问作者Сергій Курило
相关产品推荐
相关产品推荐

