Unity3D Straming игра для устройства Android - PullRequest
0 голосов
/ 23 сентября 2018

Я хочу сделать VR-игру в Unity3D, которая работает на ПК, и изображение передается на устройство Android.Вот что я делаю сейчас.

  1. Используя UDP, я подключаю устройство Android (клиент) к серверу (ПК).
  2. Я читаю изображение в байтах ипоставив его в очередь.
  3. Когда у меня что-то в очереди, поток отправки удаляет данные из очереди.
  4. Если это не первое изображение, я вычисляю расстояние Хемминга между предыдущим и текущим.
  5. Если расстояние больше, чем, скажем, 10, я отправляю diff клиенту.

Это медленно.Я был бы признателен за любую помощь, чтобы сделать это быстрее, или другую идею для этого типа проблемы.

bufferSize = 1024

Отправка кода:

private void SendData(){
count = 0;
int chunks = ((width * height * 3) / bufferSize) + 1;
EndPoint endPoint = new IPEndPoint(IPAddress.Any, 47777);
byte[] temp = new byte[1024];
byte[] prevData = null;
double[] distance = new double[chunks];
server.ReceiveFrom(temp, ref endPoint);
while (count < 1000)
{
    if (capture.frameQueue.Count > 0)
    {
        data = capture.frameQueue.Dequeue();
        if (prevData != null)
        {
            H(data, prevData, chunks, ref distance);
        }

        for (int i = 0; i < chunks; i++)
        {
            if (distance[i] > 50)
            {
                if (i < chunks - 1)
                {
                    server.SendTo(BitConverter.GetBytes(i), endPoint);
                    server.SendTo(data, i * bufferSize, bufferSize, SocketFlags.None, endPoint);
                }
                else
                {
                    server.SendTo(BitConverter.GetBytes(i), endPoint);
                    server.SendTo(data, i * bufferSize, data.Length - (bufferSize * i), SocketFlags.None, endPoint);
                }
            }
        }
        prevData = data;
        count++;
    }

}
}

Получение кода:

void ListenForData()
{
    int chunks = (dataReceived.Length / bufferSize) + 1;
    int i = 0;
    int count = 0;
    int bytesReceived = 0;
    byte[] temp = new byte[bufferSize];
    client.SendTo(new byte[1024], ep);

    while (true)
    {
        bytesReceived = client.ReceiveFrom(temp, ref ep);

        if (bytesReceived <= 16)
        {
            i = BitConverter.ToInt32(temp, 0);
        }

        if (count < chunks)
        {
            if (i < chunks - 1)
            {
                bytesReceived = client.ReceiveFrom(dataReceived, i * bufferSize, bufferSize, SocketFlags.None, ref ep);
            }
            else
            {
                bytesReceived = client.ReceiveFrom(dataReceived, i * bufferSize, dataReceived.Length - (bufferSize * i), SocketFlags.None, ref ep);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...