Open zhoXR opened 11 months ago
如果你用的dca.fastRead_in_Cpp_thread_xxx() ("xxx" can be "start", "get" and "stop") ,那么是已经考虑到了你说的那种情况的。丢帧的原因大概是因为后处理速度慢于数据到达的速度,缓冲区大小是可以自定义的,即frameNumInBuf
,如果数据没有及时取走数据,缓冲区满了就会导致未被取走的数据丢失,以腾出空间给新到来的数据。建议加大缓冲区并优化后处理程序,使其耗时小于捕获一帧数据的时间。
感谢您的解答,根据您描述的方法,我仔细检查并调试后发现仍然存在问题: 由于我想测试抓包的过程,所以没有对抓到的数据做后处理,所计算的时间只是抓包的时间。我的缓冲区设的是16,而每次抓取1帧,应该问题不出在此处。 我又做了测试,假如我把每次抓取的帧数设成n=2~16,结果发现,他们都会在抓取n帧之后,丢失一帧,如果是我上面提到的那种情况的话,应该如何修改代码啊
好像当时确实是这么设计的,可以看看fpga_udp的C++代码main.cpp中的udp_read_thread_get_frames函数,并作出相应的修改。
非常感谢您的解答,我尝试对此函数进行一些修改。但是由于我的能力所限,无法完全实现我想要的效果。不知道您是否可以提供一些修改上建议和思路呢?非常感谢!
我没记错的话当时应该是这样设计的:
显然问题就在这里,如果要改的话,我推荐在udp接收线程里,取到数据包后不要直接存入队列,而是取payload放入一个连续的缓冲区,这个缓冲区刚好是一帧的大小的整数倍,等到达数据包填满这个缓冲区后再将一整帧存入队列,并将多余的数据(下一帧的开头)存入新的缓冲区的开头。这样你就能从队列里取出一整帧数据,而不会导致丢掉一部分下一帧开头的数据导致这帧无法利用被丢弃。
您好,可以分享一下您的抓包程序吗,我的邮箱是 2080524998@qq.com
您好,我在运行captureAll.py时候,有时会出现”[fpga_udp]udp time out“这个问题,请问是怎么回事?
您好,可以分享一下您的抓包程序吗,我的邮箱是 2080524998@qq.com
您好,也希望能分享一下,951173608@qq.com
您好,可以分享一下您的抓包程序吗,我的邮箱是2080524998@qq.com
您好,也希望能分享一下,951173608 @qq.com 我用的就是作者的源代码
您好,我在运行captureAll.py时候,有时会出现”[fpga_udp]udp time out“这个问题,请问是怎么回事?
您好,请问这个问题解决了吗?
您好,我在运行captureAll.py时候,有时会出现”[fpga_udp]udp time out“这个问题,请问是怎么回事?
您好,请问这个问题解决了吗?
有时候程序端口占用了,所以会出现这种情况。具体我没有修改...
我在抓包的时候发现,每一帧和下一帧之间会丢失68个包,原因应该是第一帧的最后一个数据包中可能有第二帧的开头,导致第二帧开头找不到,直到找到第三帧时开始,所以第二帧的数据就丢失了,不知道我的理解对不对,如果正确的话,应该怎么修复代码? 还有一个问题是我发现抓包的延迟有点高,如果想优化的话,应该从哪里入手呢?