我想要在PC上运行的Unity3D中制作VR游戏,并将图像流式传输到android设备。这就是我现在正在做的事情。
很慢。对于这种类型的问题,我将提供任何帮助,以使其更快,或者有所不同。
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);
}
}
}
}