2011-01-13 41 views
1

我們有一個應用程序正在生成數據。例如,從攝像機捕獲實時視頻並進行編碼。我們需要知道什麼尺寸可以是一個編碼幀,以便通過網絡發送並毫不延遲地接收。所以說「通過TCP實時視頻流」。它的主要問題是什麼?用戶個人流量負載和服務器整體負載。我們的幀必須具有這樣的大小(這裏的大小==比特率)才能以最小的延遲由服務器接收。在我的情況下,必須使用TCP(我們必須發送所有捕獲的幀,即使它們的質量會下降)如何找出何時增加比特率? (TCP流解決方案)

我們有一個帶有「幀」的流。每個「框架」都有一個「時間戳」。幀具有實際上它們的大小的比特率屬性。我們使用我們的應用程序生成幀,並將它們一個接一個地傳輸到我們的TCP服務器套接字上。與此同時,服務器發佈回覆,以便在每個發送幀之後,我們嘗試從套接字中讀取哪些時間戳記當前在服務器上。如果時間戳低於前一幀,我們將比特率降低20%。這樣的計劃似乎工作給我一種方法vbr(降低),但我不知道如何實施增加?我的意思是我們總是可以嘗試每幀增加5%,直到某個有限的期望值,但是每次我們有延遲都會失去我們流的實時特徵...通常,這樣的方案用於找出有多少網絡流是目前由其他用戶應用程序使用,並給出多少服務器同時加載的圖片,以便我們可以實時傳輸適量的數據以供所有人接收。那麼我應該怎樣做才能增加我的計劃?所以當前比特率爲A時,我認爲我們可以爲3幀加上+ 7%,然後再加上-20%,然後如果3幀+ 7%的時間都及時到達,我們可以給A加14%,並重復循環,如果第二幀會延遲到我們這裏,希望不會很明顯...

回答

1

如果您可以接受來自視頻的丟幀,您可能需要考慮使用UDP代替。 TCP保證數據包的傳輸,但是你需要爲此付出一些開銷。

3

網絡狀況太不穩定,所以你需要不斷地適應它們。測量往返延遲:讓服務器使用數據包ID發回確認,而不是時間戳。所以你可以避免與服務器的任何時間同步(複雜的任務)。比較分組接收時間和分組發送時間以接收往返延遲值。分析往返延遲:如果它低於某個閾值(例如500ms) - 如果往返延遲大於某個其他閾值(例如1s),則可以稍微增加比特率 - 降低比特率。這樣的閾值範圍用於避免無休止的比特率修改

1

你的第一個直覺是正確的 - 正如當延遲增加時降低比特率,當延遲下降得非常低時,你可以增加比特率。

This does意味着您必須確定最大期望的延遲時間 - 您正在對圖像質量進行延遲對比。如果您希望網絡能夠提供的最佳延遲時間,請設置網絡往返時間的最大延遲時間。