Member 13117475 Ответов: 1

Как создать образ из Byte[] отправить пакеты RTP


Привет,

Я работаю над захватом изображений, вызывая службу RTSP.

Для вызова службы RTSP я создал один пример приложения (в качестве клиента), в котором я создал объект socket и вызвал метод прослушивания службы RTSP.

Я также могу получить byte[] с помощью UDP-прослушивателя, но я не могу использовать это значение byte[] ни для создания изображения, ни для создания видео, и оно выдает ошибку типа "недопустимый параметр". Итак, как я могу создать изображение/видео, используя этот байт[] ?

Для справки здесь я приложил изображение и в нем вы можете увидеть полученный байт[]
2017-07-11_1531[^]

Что я уже пробовал:

-- Код вызова службы RTSP -----
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 322);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
server.Connect(ip);
var msg ="PLAY rtsp://{cameraIP}/axis-media/media.amp?resolution=352x240&compression=80 RTSP/1.0\r\nRange: npt=0-\r\nCSeq: 5\r\nUser-Agent: Lavf57.62.100\r\nSession: 100\r\n\r\n")";
server.Send(msg);

-- Код для приема UDP-пакетов, отправленных службой RTSP -----
var myEndPoint = (EndPoint)endPoint;
var udpListener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpListener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpListener.Bind(myEndPoint);

var buffer = new byte[65536];
var size = udpListener.ReceiveFrom(buffer, ref myEndPoint);
Array.Resize(ref buffer, size);

//code for save image

MemoryStream ms = new MemoryStream(buffer);
var image = Image.FromStream(ms);
var path = string.Format(@"d:\MyImage\camImage-temp.jpeg");
image.Save(path);

1 Ответов

Рейтинг:
0

KarstenK

Почему вы отправляете TCP и прием UDP-пакетов??? Используйте TCP alsp на стороне приемника.

Вы должны использовать Изображение.Сохранить() с параметром для принудительного применения jpeg.

image.Save(path, ImageFormat.Jpeg);

В противном случае проверьте наличие других проблем, таких как передаваемые данные и их размер.


Member 13117475

1) Моя служба RTSP отправляет пакеты по протоколу UDP, так как я использовал UDP, и если я использую протокол TCP, то приложение выдает ошибку типа " принудительно закрыто удаленной конечной точкой"

2) длина данных, т. е. я получаю, не статична, но максимальный размер байта [], который я получаю, равен 95.

-- пример кода, написанного для отправки пакетов --

ms. WriteByte(0x80); / / заголовок RTCP
ms. WriteByte(0xc8); / / тип пакета = 200 = отчет отправителя
ms. WriteByte(0);
ms. WriteByte(6); / / Длина в словах - 1
ms. Write(ssrc, 0, 4); / / SSRC отправителя
ms. Write(ноль, 0, 4); / / временная метка NTP, целые секунды
ms. Write(ноль, 0, 4); / / временная метка NTP, микросекунды
ms. Write(rtp_ts, 0, 4); / / временная метка RTP
ms. Write(ноль, 0, 4); / / количество пакетов отправителя
ms. Write(ноль, 0, 4); / / Количество октетов отправителя
int len = 6 + cname.Длина + 1;
ms. WriteByte(0x80); / / заголовок RTCP
ms. WriteByte(0xca); / / тип пакета = 202 = sdes
ms. WriteByte(0);
ms. WriteByte ((byte) ((len + 3) / 4)); // длина в словах - 1
ms. Write(ssrc, 0, 4); / / SSRC отправителя
ms. WriteByte(1);