Проблема загрузки Unity Audio на определенных устройствах - PullRequest
0 голосов
/ 06 июля 2018

Я работаю над приложением Unity, созданным для устройств iOS и Android. В моем приложении я получаю URL-адрес из веб-службы, и этот URL-адрес предназначен для аудиофайла (.mp3), который я загружаю и сохраняю в приложении. Ниже приведен код для того же.

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 КБ, а исходный аудиофайл - около 5 МБ.

Теперь в коде вы можете увидеть закомментированный URL-адрес. Когда я использую закомментированный URL-адрес, загрузка звука также работает в S9. Так что я подозревал, что это какая-то проблема, связанная с ip, но клиент пробовал в разных сетях wifi, но у него это не сработало.

Итак, я хочу знать, это проблема с сервером, проблема с ip или проблема с конкретным устройством.

1 Ответ

0 голосов
/ 06 июля 2018

Это может быть связано с тем, как вы сохраняете аудиофайл. Правильный путь для сохранения файла в Unity: Application.persistentDataPath/FolderName/FileName.extension.

Это также может быть ошибка с DownloadHandlerFile. Запросите данные с помощью UnityWebRequest, затем сохраните вручную с помощью API, например File.WriteAllBytes.

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...