c# - 某些设备上的Unity Audio下载问题

标签 c# unity3d audio

我正在为iOS和Android设备构建Unity应用。在我的应用程序中,我正在从Web服务中获取一个URL,该URL是我要下载并保存在该应用程序中的音频文件(.mp3)的URL。下面是相同的代码。

if (!File.Exists(audioPath + url.Key + currentDataSetID + FindAudioType(url.Value))){
UnityWebRequest www = new UnityWebRequest("http://www.streetartmankind.org/vuforiadashboard" + url.Value);

// UnityWebRequest www = new UnityWebRequest("http://likewapdownload.com/load/Full_Mp3_Songs/2013_Bollywood_MP3_Songs/ABCD_Any_Body_Can_Dance/Bezubaan.mp3");

www.downloadHandler = new DownloadHandlerFile(audioPath + url.Key +currentDataSetID + FindAudioType(url.Value));

yield return www.SendWebRequest();

if (www.isNetworkError || www.isHttpError){
    Debug.Log(www.error);
    }
    else
        {
          Debug.Log("Audio Downloaded - " + www.url);
          Debug.Log("File successfully downloaded and saved to " + audioPath);

          Debug.Log(www.url + "\n" + audioPath + url.Key +
                        currentDataSetID + FindAudioType(url.Value));
        }

  }

该代码可以在我的Android和iPhone设备上完美运行,但是在客户端的Samsung S9上,音频文件未下载。
在S9中创建了音频文件,但是文件大小仅为6 KB左右,而原始音频文件为5 MB左右。

现在在代码中您可以看到一个被注释掉的URL。当我使用注释的URL时,音频下载也可以在S9中使用。
所以我怀疑这是一些与IP相关的问题,但是客户端尝试了各种wifi网络,但对他没有用。

所以我想知道这是服务器问题还是IP问题还是设备特定问题。

最佳答案

这可能是由于您保存音频文件的路径。在Unity中保存文件的正确路径是Application.persistentDataPath/FolderName/FileName.extension

这也可能是DownloadHandlerFile的错误。使用UnityWebRequest请求数据,然后使用File.WriteAllBytes这样的API手动保存。

void Start()
{
    StartCoroutine(GetRequest("http:///www.yoururl.com"));
}

IEnumerator GetRequest(string uri)
{
    UnityWebRequest uwr = UnityWebRequest.Get(uri);
    yield return uwr.SendWebRequest();

    if (uwr.isHttpError || uwr.isNetworkError)
    {
        Debug.Log("Error While Sending: " + uwr.error);
    }
    else
    {
        Debug.Log("Downloaded");

        string dataFileName = "FileName";
        string tempPath = Path.Combine(Application.persistentDataPath, "Audio");
        tempPath = Path.Combine(tempPath, dataFileName + ".mp3");

        SaveFile(tempPath, uwr.downloadHandler.data);
    }
}

void SaveFile(string path, byte[] fileBytes)
{
    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    }

    try
    {
        File.WriteAllBytes(path, fileBytes);
        Debug.Log("Saved Data to: " + path.Replace("/", "\\"));
    }
    catch (Exception e)
    {
        Debug.LogWarning("Failed To Save Data to: " + path.Replace("/", "\\"));
        Debug.LogWarning("Error: " + e.Message);
    }
}

要加载它,请参见this

关于c# - 某些设备上的Unity Audio下载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51203588/

相关文章:

c# - 模拟 DbContext 条目

c# - 循环引用/保留循环

unity3d - Unity 中的物理与纸板场景困惑

iOS UnitySendMessage 调用参数

c# - 根据关键字剪切音频文件

php - 将音频上传到服务器PHP android

java - 在 Java 中比较两个声音(有容差)

c# - 可以使用 Control.Invoke 而不是使用锁吗?

c# - StackExchange.Redis 字符串值转换为集合

c# - Random.value 到 bool?