【问题标题】:Android Unity3D VideoPlayer Playing video "from URL" not working properlyAndroid Unity3D VideoPlayer“从 URL”播放视频无法正常工作
【发布时间】: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();
        });
    }

【问题讨论】:

    标签: c# android unity3d


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多