2016-08-20 100 views
0

因此,我正在使用通过以太网电缆连接到计算机的摄像头,并且显然必须作为tcp/ip流套接字进行访问。如何确保从tcp/ip套接字获取最新数据?

基本上,我想要像每1秒拍摄一张图片。我注意到虽然来自相机的输入数据不断出现,但我想要的仅仅是从相机获取最新数据,而不是其他任何东西,即只有当时最新的图像。

我到目前为止读到的是我需要多次读取输入数据直到达到“最新数据”。这真的是唯一的方法吗?我真的不喜欢这样的想法:一个进程一直忙于从流套接字中“丢弃”传入的数据。

理论上,我不能减少来自套接字输入的“输入缓冲区大小”,以便我只能接收一张图片的数据值?然后,每一个进一步的数据都将被浪费,所以当输入缓冲区被刷新一次时,它会被最新的数据填充或类似的东西。 (我的意思是,对于有多少来自流的输入数据可以“堆积”等待被处理/读取是有限制的,对吧?当达到该限制时会发生什么情况?进一步的数据被丢弃还是'缓冲区'被新数据覆盖了吗?)

这可能吗?我是一个完整的初学者,所以我只是推理。如果这样的事情是可能的,任何人都可以显示如何编码的大纲? (我必须在Ubuntu上使用boost asio库来处理这个东西) 这会非常有帮助!

回答

1

是的,这是唯一的方法。

使用TCP的全部原因是它是一个“可靠”的协议,保证交付。与UDP相反。

TCP的工作是将数据以发送的顺序传送给接收方,而不会丢失任何东西。如果数据无法传递,那么在TCP放弃时,连接会断开。但是,只要存在活动连接,接收方就会获得发送方发送的所有内容。

如果您不想获取发件人获取的某些数据,则必须对发件人进行适当的安排,以便发生这种情况。 TCP不会丢弃数据,仅仅因为接收者不需要它。

+0

嗯,好的。那么,是否有可能使用这个UDP协议来代替以太网连接呢?像UDP/IP的东西? (我只知道相机设备有固定IP,需要连接) – kushy

+2

您必须查阅相机的技术参考手册。如果摄像机支持UDP流,那么您不需要我的许可即可使用它。 –

+0

我在手册中查了一下,它在可能的协议列表中列出了'tcp/ip stream':-(猜猜我必须设置一个额外的线程来'捕捉并丢弃'传入的数据真的时间,不能帮助,我猜。 反正,感谢您的帮助! – kushy