В настоящее время я работаю над проектом, в котором мне нужно отправлять и получать кадры с Jetson TX1 на ПК.В настоящее время у меня есть клиент, которого я нашел на github , но проблема связана с приемной частью.Кадры должны быть приняты на единицу, так как они должны быть отображены в шлеме VR.В настоящее время у меня есть код для получения и отображения фреймов:
using System.Net;
using System.Net.Sockets;
using UnityEngine;
using System;
public class Test : MonoBehaviour
{
Socket socket;
int port = 5356;
private bool stopping = false;
byte[] buffer;
int recvMasgSize;
Texture2D texture;
Renderer renderer;
private object e;
void Start()
{
renderer = new Renderer();
renderer = GetComponent<Renderer>();`enter code here`
texture = new Texture2D(2, 2);
IPEndPoint endpointReceive = new IPEndPoint(IPAddress.Any, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(endpointReceive);
socket.Blocking = false;
buffer = new byte[65540];
Debug.Log("start");
}
void Update()
{
do
{
Debug.Log("waiting");
recvMasgSize = socket.Receive(buffer);
} while (recvMasgSize > sizeof(int)); //wait for the first information containing image size
Debug.Log("received");
int total_pack = (int) buffer[0];
Debug.Log(total_pack);
byte[] longbuf = new byte[4096 * total_pack];
for (int i = 0; i< total_pack; i++)
{
recvMasgSize = socket.Receive(buffer);
if(recvMasgSize != 4096)
{
Debug.Log("received unexpected packet size");
continue;
}
Buffer.BlockCopy(longbuf, i * 4096, buffer, 0, 4096);
}
texture.LoadImage(longbuf);
renderer.material.mainTexture = texture;
}
}
Установка сокета на блокировку = true просто приводит к сбою единицы, установка его на false приводит к ошибке (SocketException не блокирующая операция сокета можетне было завершено. Я слышал о возможности использования асинхронного метода, но, поскольку все это действительно ново для меня, я не знаю, как их использовать. Я надеюсь, что кто-то может помочь, чтобы я мог продолжить этот проект.
Спасибо всем заранее.