2015-12-31 2 views
-1

Я получаю непрерывный поток видео, я должен его декодировать и отображать. Камера отправляет около 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); 

Может ли кто-нибудь помочь мне решить эту проблему?

На самом деле я не хочу, чтобы полные кадры были декодированы. Мне нужно только декодировать доступный фрейм. Средство отбрасывания оставшихся кадров, которые не могут быть обработаны.

+0

Ваша петля неверна. Это должно быть 'while ((Siz = recvfrom (...))> 0)'. В противном случае вы обрабатываете данные даже в конце потока. – EJP

+0

Я сделал это, спасибо, что заметил это –

ответ

1

Единственный способ - фактически прочитать из гнезда. Вы можете рассмотреть возможность чтения в выделенном потоке и сохранить его в буфере памяти только в том случае, если буфер пуст, и тем самым отбросить другие кадры. Затем другой поток мог бы читать и очищать буфер памяти по своему времени, если это необходимо.

+1

Программа работала нормально все время, что было проблемой с камерой, камера нуждается в одном битном максимуме для непрерывного потока. Спасибо за помощь ребята. –

Смежные вопросы