Я получаю непрерывный поток видео, я должен его декодировать и отображать. Камера отправляет около 20 тыс. Пакетов (1288 байт) в секунду. Я получаю поток до 10 секунд, и камера перестает передавать поток. Я думаю, что это связано с буфером. Я пытаюсь очистить свой буфер, используя этот код:Rx Буфер Winsock Socket программирование C++. Как очистить буфер RX?
long a = 9965535;
if (setsockopt(camm, SOL_SOCKET, SO_RCVBUF, (const char*)&a, sizeof(long)) == -1) {
fprintf(stderr, "Error setting socket opts: %s\n", strerror(errno));
}
do{
Siz = recvfrom(camm, message, 1300, 0, (struct sockaddr *) &cam, &caml);
image(message, Siz);
aab++;
if (aab > 1000){
// memset((char *)&ap, 0, 65535);// &ap, 65535
//ap = "1288";
// memset(&a, 0, 9965535);
// *loc = 9965535;
// memset(loc, 0, 9965535);
aab = 0;
}
} while (Siz > 0);
Может ли кто-нибудь помочь мне решить эту проблему?
На самом деле я не хочу, чтобы полные кадры были декодированы. Мне нужно только декодировать доступный фрейм. Средство отбрасывания оставшихся кадров, которые не могут быть обработаны.
Ваша петля неверна. Это должно быть 'while ((Siz = recvfrom (...))> 0)'. В противном случае вы обрабатываете данные даже в конце потока. – EJP
Я сделал это, спасибо, что заметил это –