Страница 1 из 1

Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 19 май 2019, 10:52
GospelOfMyHeart
Здравствуйте, у меня проблема, никак не могу сообразить, как сделать потоковую загрузку аудио с сервера. То есть, на сервере лежит аудио файл, мне нужно его не просто скачать и воспроизвести, а воспроизводить во время скачки и сохранить на время запуска приложения. Н-ый день ломаю голову, в гугле ничего толкового не написано. Из хендлера можно достать скачанные байты, но я не знаю, что с ними и как можно сделать. Пока что код следующий:
Синтаксис:
Используется csharp
public class StreamingAudio:MonoBehaviour
{
   public AudioSource audioSource;
   public string URL;
    public void Start()
    {
        StartCoroutine(GetData());
    }

   public IEnumerator GetData()
    {
        // Создаем загрузчик аудио
        DownloadHandlerAudioClip downloadHandler = new DownloadHandlerAudioClip("", AudioType.OGGVORBIS);
        //Делаем загрузку аудио потоковой
        downloadHandler.streamAudio = true;
        UnityWebRequest request = new UnityWebRequest(URL, "GET", downloadHandler, null);

        // Начинаем загрузку аудио
        request.SendWebRequest();
        AudioClip audioClip = null;
        //в цикле проверяем завершенность загрузки
        while (audioClip == null )
        {
           
            try
            {
                //пытаемся получить скаченное аудио
                audioClip = DownloadHandlerAudioClip.GetContent(request);    
            }
            catch (Exception e) {
                //возвращает ошибку, что еще не скачано
                Debug.Log("Exception: " + e.Message);
            }
             //проверяю количество загруженых байтов( то есть, из них можна что-то вытянуть, но как?)
             Debug.Log("Загружено байтов: "+ request.downloadedBytes );
            yield return 0f;
        }

        // кладу загруженное аудио в аудиосоурс
        audioSource.clip = audioClip;
        audioSource.Play();

        yield return 0;
    }
}
 

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 19 май 2019, 13:54
Jarico
Средствами Unity такое не прокатит, нужны сторонние либы

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 19 май 2019, 16:09
GospelOfMyHeart
А какими, к примеру? Просто я мало разбираюсь в самой структуре аудио и даже не очень представляю, как можно будет закастить его к AudioClip`у в юнити.

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 19 май 2019, 22:39
seaman
Средствами Unity такое не прокатит, нужны сторонние либы

А пробовали?
Зачем тогда вообще это в Юнити есть?
https://docs.unity3d.com/ScriptReferenc ... Audio.html

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 23 май 2019, 09:21
GospelOfMyHeart
seaman писал(а):
Средствами Unity такое не прокатит, нужны сторонние либы

А пробовали?
Зачем тогда вообще это в Юнити есть?
https://docs.unity3d.com/ScriptReferenc ... Audio.html

В коде я выставил это свойство в true, но аудио все равно не удается достать до того, как файл загрузится полностью. Возможно надо не GetContent() использовать, что-то другое?

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 23 май 2019, 10:11
seaman
Проигрывать аудио можно до полной загрузки.
Частично загруженные данные можно попробовать получить через https://docs.unity3d.com/ScriptReferenc ... tData.html
Не пробовал. Попробуйте и скажите что получилось.

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 23 май 2019, 13:17
GospelOfMyHeart
GetData() возвращает массив байтов, сообственно, оно никак не приведеться к аудиоклипу. Так что так не получится

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 23 май 2019, 14:53
GospelOfMyHeart
Error: Cannot create FMOD::Sound instance for resource 0x*: , (Unsupported file or audio format. )
ошибка возвращается, при попытке получения аудио файла из audioClip = downloadHandler.audioClip. Что это, почему это? Я уже не знаю, что можно сделать

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 26 май 2019, 14:09
AngryCat
Не понимаю смысла. Ведь аудио можно грузить заранее и производить в нужный момент!? Зачем танцы с бубном??

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 27 май 2019, 17:12
GospelOfMyHeart
AngryCat писал(а):Не понимаю смысла. Ведь аудио можно грузить заранее и производить в нужный момент!? Зачем танцы с бубном??

Ответ: Надо.
Я разорбрался с этим. Дело в том, что я делал все на старой версии юнити (2018.2.21). После обновления до 2018.4 LTS, все начало работать и не выдавать ошибки. Единственно что, код немного поменял. Достаю не через GetContent(), а через downloadHandler.audioclip и не в while. В while я лишь проверяю, насколько загрузился аудиоклип (request.downloadprogress<0.15f). После выхода с цикла, чуть ниже забираю из хендлера аудиоклип. Обновляйте юнити, крч.

Re: Потоковая загрузка аудио с UnityWebRequest

СообщениеДобавлено: 27 май 2019, 17:14
AngryCat
Нууу, как способ еще можно делать при помощи плагина на Voice Chat. Это же по сути то, что ты написал выше