Rx缓冲区Winsock套接字编程C++.如何清除RX缓冲区

Rx Buffer Winsock Socket programming C++. How to clear RX buffer?

本文关键字:缓冲区 清除 RX 何清除 Winsock 套接字 编程 C++ Rx      更新时间:2023-10-16

我正在接收连续的视频流,我必须解码并显示它。摄像头每秒发送约20k个数据包(1288字节)。我得到流大约10秒,相机停止传输流。我认为这是由于缓冲。我正试图通过以下代码清除我的缓冲区:

long a = 9965535;   
    if (setsockopt(camm, SOL_SOCKET, SO_RCVBUF, (const char*)&a, sizeof(long)) == -1) {
        fprintf(stderr, "Error setting socket opts: %sn", 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); 

有人能帮我解决这个问题吗?

事实上,我不希望完整的帧被解码。我只需要解码可用的帧。意味着丢弃无法进行处理的剩余帧。

唯一的方法是实际从套接字中读取。您可以考虑在专用线程中进行读取,并让它仅在缓冲区为空时将视频帧存储在内存缓冲区中,同时丢弃其他帧。然后,另一个线程可以根据需要在自己的时间读取并清除该内存缓冲区。