-1
我正在接收連續的視頻流,我必須解碼並顯示它。 相機每秒發送大約20k個數據包(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
我做到了,感謝您注意到這個 –