【发布时间】:2020-11-21 01:10:51
【问题描述】:
平台:Unity 2020.1.0f1
我在创建一个小游戏时遇到了一个奇怪的问题,该游戏旨在将视频从远程 URL 下载到 Application.PersistentDataPath 并使用“RenderTexture”方式在 Unity3D-VideoPlayer 中播放它们,方法是按下特定视频的按钮.
在编辑器中一切正常...
在 IOS 上一切正常...
在 Android(无论哪个版本)上,只有资产文件夹中的视频可以正常播放。从 Application.persistentDataPath 访问下载的文件在 Android 上根本没有显示任何内容...
我检查的东西(除了单纯的失明):
- “外部写入权限”> 将所有内容强制设置为“内部”...无法正常工作
- 使用 Path.Combine() 和/或“字符串文件路径 = ...”
- “不同的视频格式”> 不...资产视频无需转码即可正常播放(它是 h.264 AVC,650x650px,30fps - AAC 音频,44,1kHz,Bps 32)
示例代码如下,测试场景也可以在这里下载: http://weristaxel.de/upload/Videotest.unity http://weristaxel.de/upload/VideotestController.cs
Unity 资源文件夹中的视频: https://corolympics.azurewebsites.net/assets/game1howto.mov
我错过了什么?
public void PlayFromPersistent()
{
// NOT WORKING ON ANDROID
VideoPlayer VideoHowTo = VideotestCanvas.transform.Find("VideoPlayer").GetComponent<VideoPlayer>();
string filePath = Application.persistentDataPath + "/game2howto.mov";
VideoHowTo.Stop();
VideoHowTo.url = filePath;
VideoHowTo.source = VideoSource.Url;
DebugText.text = "VideoHowTo.url = " + filePath;
VideoHowTo.Prepare();
VideoHowTo.Play();
}
public void PlayFromAssets()
{
// WORKING ON ANDROID
VideoPlayer VideoHowTo = VideotestCanvas.transform.Find("VideoPlayer").GetComponent<VideoPlayer>();
VideoHowTo.Stop();
VideoHowTo.clip = assetVideo;
VideoHowTo.source = VideoSource.VideoClip;
DebugText.text = "VideoHowTo.clip set - original path " + assetVideo.originalPath;
VideoHowTo.Play();
}
public void DownloadVideo()
{
// THIS DOWNLOADS A TEST VIDEO TO "persistentDataPath"...
string url = "https://corolympics.azurewebsites.net/assets/game2howto.mov";
Debug.Log("Downloading " + url);
var uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET);
string filename = url.Split('/').Last();
string path = Path.Combine(Application.persistentDataPath , filename);
uwr.downloadHandler = new DownloadHandlerFile(path);
uwr.SendWebRequest();
DebugText.text = "Download to " + path + " finished";
}
public void AddListener()
{
// NOT WORKING ON ANDROID - THIS ADDS A LISTENER TO AN EMPTY BUTTON TO EMULATE THE TARGET BEHAVIOUR
Button button = VideotestCanvas.transform.Find("FromPersistentListenerButton").GetComponent<Button>();
Color blueColor = new Color32(52, 152, 219, 255);
button.GetComponent<Image>().color = blueColor;
button.onClick.AddListener(() =>
{
VideoPlayer VideoHowTo = VideotestCanvas.transform.Find("VideoPlayer").GetComponent<VideoPlayer>();
string filePath = Application.persistentDataPath + "/game2howto.mov";
VideoHowTo.Stop();
VideoHowTo.url = filePath;
VideoHowTo.source = VideoSource.Url;
DebugText.text = "VideoHowTo.url = " + filePath;
VideoHowTo.Play();
});
}
【问题讨论】: