Мне нужно отобразить необработанные данные UDP, поступающие от моего Drone.
К сожалению, Drone не просто использует один из существующих стандартов для потокового видео, такой как RTSP. Вместо этого необработанные видеопакеты отправляются через UDP и должны быть повторно собраны и декодированы, прежде чем их можно будет просмотреть.
Поскольку размер одного видеокадра больше, чем размер одного UDP-пакета, Tello разбивает каждый кадр на части и отправляет пакеты с заголовком в 2 байта, чтобы указать, как их нужно собрать.
Видеоданные представляют собой кодировку H264 YUV420p. Используя эту информацию, можно декодировать видео, используя стандартные инструменты, такие как ffmpeg, после удаления байтов заголовка.
Есть идеи, как мне это сделать с помощью C #?
Position Usage
0 Sequence number
1 Sub-sequence number
2-n Video data
UdpClient receiver = new UdpClient(11111);
//receiver.Client.ReceiveBufferSize = 1024;
IPEndPoint hostEP = new IPEndPoint(IPAddress.Parse("192.168.10.1"),0);
receiver.Connect(hostEP);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
int i = 0;
string fileName = "car_pic";
while (true)
{
if (receiver.Available > 0)
{
//Debug.Write("Packet Received");
byte[] data = receiver.Receive(ref ep);
MemoryStream stream = new MemoryStream(data);
Device.BeginInvokeOnMainThread(() =>
{
try
{
//DronController.displayImage.Source =
ImageSource.FromStream(()=>stream);
//DronController.displayPath.Text =
data.ToString();
//stream.Close();
}
catch (Exception ex)
{
Debug.WriteLine("Exception!!!");
Debug.WriteLine(ex);
}
});
}
}