Я не знаю, подходящее ли слово «замораживание». Я работаю над Volumetri c Video Player. У меня есть http-сервер, и я хочу получать кадры с этого сервера. Структуры, которые я называю кадрами, состоят из трехмерных объектов, в отличие от традиционных видео. И каждый пакет, который я получаю с сервера, состоит из нескольких кадров.
Теперь вернемся к проблеме:
private IEnumerator Get(string url)
{
int htmlNumber = 0;
int i = 0;
while (i < 100)
{
string sequentialUrl = url + "_" + htmlNumber.ToString();
Debug.Log(sequentialUrl);
using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(sequentialUrl))
{
yield return unityWebRequest.SendWebRequest();
// This method returns an AsyncOperation object. Yielding the AsyncOperation inside a
//coroutine will cause the coroutine to pause until the UnityWebRequest encounters a system error or finishes communicating.
if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
{
Debug.Log("error");
}
else
{
byte[] results = unityWebRequest.downloadHandler.data;
allResult.Add(results);
}
}
i++;
htmlNumber++;
}
}
Это моя структура для получения кадров. Он работает хорошо. Я могу получить все пакеты, но проблема в этой строке:
"yield return unityWebRequest.SendWebRequest();"
Как видите, программа остается в этой строке до тех пор, пока не будет завершен запрос пакета. Например, если размер моего пакета составляет 100 МБ, это время ожидания в моих условиях будет примерно 3-4 секунды.
Приятно то, что размеры моего пакета не такие большие (около 500 КБ). Но даже если его размер небольшой, на этом шаге видеоплеер зависает. Потому что, с одной стороны, видеопроигрыватель работает, но как раз в это время запрос на получение останавливает систему на небольшие промежутки времени.
Я не могу больше уменьшать размеры пакетов. Какой совет вы бы дали?
Спасибо советом.