Я хочу сделать VR-игру в Unity3D, которая работает на ПК, и изображение передается на устройство Android.Вот что я делаю сейчас.
- Используя UDP, я подключаю устройство Android (клиент) к серверу (ПК).
- Я читаю изображение в байтах ипоставив его в очередь.
- Когда у меня что-то в очереди, поток отправки удаляет данные из очереди.
- Если это не первое изображение, я вычисляю расстояние Хемминга между предыдущим и текущим.
- Если расстояние больше, чем, скажем, 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);
}
}
}
}