【发布时间】:2016-12-05 06:51:19
【问题描述】:
我有一个 C++ 程序,它从高速摄像机读取帧并将每个帧写入一个套接字(unix 套接字)。每次写入为 4096 字节。每帧大约是 5MB。 (不能保证帧大小是恒定的,但它始终是 4096 字节的倍数。)
有一个从套接字读取的python脚本:每次调用recv时读取10 * 4096字节。我经常会遇到意想不到的行为,我认为这可以归结为了解以下有关套接字的内容。我相信我的两个程序都处于阻塞模式write/recving。
- 我可以一次写入整个帧(使用 5MB 数据写入调用)吗?推荐吗?速度是这里的主要关注点。
- 如果python客户端读失败或读慢于写,是否意味着一段时间后socket上的写操作不会添加到缓冲区?或者,他们会覆盖缓冲区吗?如果没有人在读取套接字,我不介意覆盖缓冲区。
理想情况下,我希望我的应用程序尽可能快地写入套接字。如果没有人在读取数据,那么覆盖就可以了。如果有人正在从套接字读取数据但读取速度不够快,我想将所有数据存储在缓冲区中。那么如何在读取缓慢时强制我的套接字增加缓冲区大小?
【问题讨论】:
-
一个一般的想法,使用 UDP 套接字。如果您使用的是 OpenCV,请参阅 cs.utexas.edu/~teammco/misc/udp_video
-
您对延迟和抖动的关注程度如何?
标签: python c++ sockets unix-socket