将Unity3D Straming游戏移植到Android设备

时间:2018-09-23 18:29:44

标签: c# unity3d streaming

我想要在PC上运行的Unity3D中制作VR游戏,并将图像流式传输到android设备。这就是我现在正在做的事情。

  1. 使用Udp,我正在将android设备(客户端)连接到服务器(PC)。
  2. 我将图像读取为字节并排队。
  3. 当我排队时,发送线程使数据出队。
  4. 如果不是第一张图像,我正在计算上一张图像与当前图像之间的汉明距离。
  5. 如果距离大于10,我会将差异发送给客户端。

很慢。对于这种类型的问题,我将提供任何帮助,以使其更快,或者有所不同。

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);
            }
        }
    }
}

0 个答案:

没有答案