Потоковая загрузка аудио с UnityWebRequest
Добавлено: 19 май 2019, 10:52
Здравствуйте, у меня проблема, никак не могу сообразить, как сделать потоковую загрузку аудио с сервера. То есть, на сервере лежит аудио файл, мне нужно его не просто скачать и воспроизвести, а воспроизводить во время скачки и сохранить на время запуска приложения. Н-ый день ломаю голову, в гугле ничего толкового не написано. Из хендлера можно достать скачанные байты, но я не знаю, что с ними и как можно сделать. Пока что код следующий:
Синтаксис:
Используется 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;
}
}
{
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;
}
}