2016-08-20 101 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