Android Unity3D VideoPlayer无法正常播放“来自URL”的视频

时间:2020-07-31 07:30:14

标签: c# android unity3d

平台:Unity 2020.1.0f1

我在创建一个小游戏时遇到了一个奇怪的问题,该游戏旨在将视频从远程URL下载到Application.PersistentDataPath并通过“ RenderTexture”方式在Unity3D-VideoPlayer中播放,方法是按下特定视频的按钮

在编辑器中,一切正常...

在IOS上,一切正常...

在Android(无论哪个版本)上,只有资产文件夹中的视频可以正常播放。从Application.persistentDataPath访问下载的文件在Android上什么也没显示。

我检查过的东西(除了简单的失明):

  • “外部写入权限”>强制在“内部”上执行所有操作...不起作用
  • 使用Path.Combine()和/或“字符串filepath = ...”
  • “不同的视频格式”>否...资产视频可以正常播放而不进行转码(它是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();
        });
    }

1 个答案:

答案 0 :(得分:0)

如果您仍然被卡住,我会尝试在您添加侦听器事件时创建一个独立函数。所以它会类似于 'button.onClick.AddListener(() => IndFunction())' 而不是每次都创建一个新实例。不久前我被困在类似的事情上,我为每个按钮创建了一个可编辑的脚本来存储每个按钮的信息,并根据图像链接和图像名称列表设置每个按钮。

相关问题