理解低延遲視頻編碼的正確姿勢

在視頻世界中,延遲是獲取視頻幀的瞬間與該幀顯示的瞬間之間的時間量。低延遲是任何與視頻內容實時交互的系統的設計目標,例如視頻會議或無人機駕駛。

但是“低延遲”的含義可能會有所不同,實現低延遲的方法也並不相同。本文將定義和解釋視頻延遲的基礎知識,並討論如何正確選擇對延遲影響最大的視頻編碼技術。

表徵視頻系統延遲

(characterizing video system latency)

從攝像機捕獲畫面到顯示像素之間是有許多步驟的,由這些處理步驟中的每一個步驟所貢獻的延遲以及發送壓縮視頻流所需的時間一起產生總延遲,這種延遲有時也被稱爲端到端延遲。

測量視頻延遲

(measuring video latency)

延遲通常以時間單位表示,例如秒或毫秒(ms)。但是視頻延遲的最大問題是需要臨時存儲數據的處理階段,即在某種形式的存儲器中的短期緩衝。因此,視頻系統工程師傾向於根據緩衝的視頻數據來測量延遲,視頻的幀率決定了每一幀的延遲。例如,30幀/秒(fps)視頻中的一幀延遲對應於延遲的1/30秒(33.3ms)。

圖1. 1080p、30fps視頻流中的延遲

從視頻中的線(lines)轉換爲時間需要幀率和分辨率。720p高清視頻幀具有720條水平線,因此30fps的一行延遲爲1 /(30 * 720)= 0.046ms的延遲。在1080p @ 30fps中,相同的單線延遲是更短的0.030ms。

定義“低延遲”

沒有定義低延遲的通用絕對的定義,相反,被認爲可接受的低延遲因應用程序而異。

當人類在實時視頻會議中或在玩遊戲時與視頻交互時,低於100毫秒的延遲被認爲是足夠低的,因爲這樣的延遲並不影響大多數人的體驗。但是在機器與視頻交互的應用中,比如在許多汽車,工業和醫療系統中,延遲要求高得多:30ms,10ms,甚至不到一毫秒,具體取決於系統的要求。還有應用於視頻處理功能和IP內核的術語超低延遲(ultra-low latency),這是一個市場概念的描述而不是技術定義,它只是意味着某些應用程序的“更加低的延遲”。

在視頻流應用中設計低延遲

與大多數系統設計一樣,爲傳輸系統實現適當的低延遲需要權衡各個方面,需要實現硬件、處理速度、傳輸速度和視頻質量的最佳平衡。如前所述,任何視頻數據的臨時存儲(未壓縮或壓縮)都會增加延遲,因此減少緩衝是一個很好的低延遲處理方法。

播放端想要播放視頻必須等到緩衝區某些特定數量的數據可用,所需的數據緩衝量可以從幾個像素到幾個視頻行,或者甚至到多個整幀。考慮到目標最大可接受延遲,我們可以計算系統可以容忍的數據緩衝量,從而計算出需要優化延遲時緩衝像素,線或幀的多少。

例如,對於使用1080p@30fps視頻的流媒體系統,觀衆需要100ms最大延遲,我們可以通過處理傳輸管道計算最大允許緩衝,如下所示:100ms /(每幀33.3ms)= 3幀,或每幀1080行x 3幀= 3240行,或每行1920像素×3240行= 620萬像素。

由於JPEG編碼器的延遲通常只有幾千個像素,所以相對整個延遲系統是無關緊要的,因爲它太小而不能在端到端延遲方面產生任何顯着差異。而相應的應該關注整個幀或大量視頻行被緩衝的系統的其他部分。

表1提供了精心設計的“低延遲”視頻流系統各個階段的延遲分佈。這裏已經消除了所有不必要的幀級緩衝,並且始終使用了硬件編解碼器(因爲軟件編解碼器通常具有更高的延遲,這是由於與存儲器傳輸和OS的任務級管理相關的延遲開銷)。

表1. 傳輸系統中各部分對延遲的影響,1080p@30fps視頻傳輸系統

與大多數視頻流應用程序一樣,主要的剩餘延遲貢獻者是解碼器流緩衝器(Decoder Stream Buffer ,DSB)。 接下來我們將看看它是什麼,爲什麼需要它,以及如何才能最好地減少它引入的延遲。

DSB,主要的延遲貢獻者

(contributor)

在我們的表1示例中,我們看到DSB可能會增加16ms到1sec的延遲。這個大範圍取決於視頻流的比特率屬性。我們可以控制哪些屬性來將DSB延遲保持在此範圍的下限?

恆定比特率與可變比特率

視頻傳輸系統的帶寬限制通常需要調節傳輸比特率。例如,可能需要壓縮720p30視頻,以便在比特率限制爲每秒10兆比特(Mbps)的信道上成功傳輸。

可以合理地假設每個時間點恆定的比特率在傳輸,例如,每幀以相同的10Mbps傳播。但事實證明這不是真的,這就是爲什麼我們需要解碼器的緩衝區。

視頻壓縮是指通過使用較少的比特來表示相同的視頻內容以減少視頻數據大小。但是,並非所有類型的視頻內容都同樣容易接受壓縮。例如,在給定的幀中,圖像的平坦背景部分可以用比更詳細的前景部分更少的比特來表示。以類似的方式,高運動序列比具有中等運動或無運動的運動序列需要更多的比特。

因此,壓縮本身產生可變比特率(VBR)的流。利用比特率調節(或比特率控制),強制壓縮以在相等的時間段(例如,每10幀或每3秒間隔)產生相同量的流數據,我們稱之爲恆定比特率(CBR)視頻。它以犧牲視頻質量爲代價,因爲我們實際上要求壓縮引擎根據時間而不是圖像或序列複雜度爲內容分配單位。

用於定義恆定比特率的平均週期也對視頻質量有重大影響。例如,CBR爲“10Mbps”的流可以具有每秒10Mbits的大小,或者每半秒5Mbits,或者每10秒100Mbits。更重要的是要注意比特率在該平均週期內波動。例如,我們可能每5秒平均50Mbps,但這可能意味着前兩秒爲40Mbps,其餘三秒爲10Mbps。

正如限制比特率會影響質量一樣,限制平均週期也會影響質量,較小的平均週期會導致傳輸視頻的質量降低。

確定解碼器流緩衝區大小

圖2. 10Mbps CBR傳輸系統,平均週期爲10幀

現在我們知道CBR流實際上在傳輸時是波動的,並且傳輸比特率和平均週期都影響質量,這樣就可以確定給定系統的DSB需要多大。

首先,應理解,儘管接收具有可變比特率的數據,但解碼器仍以特定的、恆定的比特率輸出數據,如由輸出顯示設備所預期的分辨率和幀率所定義的那樣(例如,1080p30)。

如果編碼器和解碼器之間的通信信道沒有帶寬限制並且可以發送波動的比特率,則解碼器一旦開始接收壓縮數據就可以開始解碼。但實際上,通信信道通常具有帶寬限制,例如,802.11b WiFi爲6Mbps,或者視頻流可能只能使用特定數量的可用帶寬,因爲其他流量需要通過同一信道。在這些情況下,解碼器需要以有時高於或低於信道比特率的速率傳輸數據。因此需要解碼器流緩衝器。

DSB負責彌合通信速率不匹配的問題,並確保解碼器不會“捱餓”傳入數據,從而導致播放中斷(回想起當您觀看NetFlix或YouTube視頻時有時出現的“正在緩衝...”消息)。 DSB通過收集和存儲緩衝足夠的輸入數據來實現這一目標,直到它能夠爲解碼器提供足夠的數據來處理而不會中斷。

圖3. 通過帶寬受限的通道,不同階段採用恆定和可變比特率進行視頻流傳輸

所需的緩衝量取決於比特率和流的平均週期。 爲了確保解碼器在播放期間不會耗盡數據,DSB必須存儲與一個完整平均週期相對應的所有數據。 平均週期以及與解碼器的流緩衝器相關的等待時間可以從幾十幀到一整幀,並且在一些情況下,可以低至幀的一小部分。

總而言之,由於DSB對端到端延遲的影響最大,而CBR流的平均週期決定了DSB的大小,因此平均週期是設計低延遲系統的最關鍵因素。但是如何控制CBR平均週期?

使用正確的視頻編碼器減少延遲

我們已經看到雖然DSB的大小極大地影響了延遲,但是在早期視頻編碼階段發生的碼率控制和平均週期定義實際上決定了需要多少緩衝。不幸的是,爲特定系統選擇最佳編碼並不容易。

您可以選擇在視頻系統中使用多種編碼壓縮標準,包括JPEG,JPEG2000,MPEG1/2/4和H.264。您會認爲這些標準將包含處理碼率控制的規範,但它們都沒有。這使得標準之間的選擇成爲一項相當具有挑戰性的任務,並且需要您在決策過程中仔細考慮特定的編碼器。

選擇最佳編碼器的因素是看能否以最小的視頻質量影響來控制比特率和平均週期,比如說有的編碼器沒有碼率控制功能,具有碼率控制但不能提供足夠用戶控制的編碼器,以及支持低延遲編碼的編碼器,這些都會有非常不一樣的視頻質量。

爲給定應用選擇合適的編碼器是一個涉及視頻質量評估和比特率分析的過程,即使對於專業視頻工程師也是如此。一些關鍵功能也可以幫助您快速將高效編碼器與非高效編碼器分開,包括碼率控制粒度和內容自適應碼率控制。

碼率控制粒度

碼率控制過程採用幾種複雜的技術方法來修改壓縮程度以滿足目標比特率,例如量化級別調整。可以應用一個簡單的指導原則:調整壓縮級別越頻繁,壓縮視頻在質量和碼率控制精度方面的效果就越好。

這意味着您可控制編碼器執行基於幀的碼率控制(即,它每幀調節一次壓縮),但是效率低於在每幀期間多次進行碼率控制調整的編碼器。因此,在努力實現低延遲和高質量時,請尋找具有子幀碼率控制的編碼器。

內容自適應碼率控制

單通道碼率控制算法基於知識和猜測來決定壓縮變化的正確水平。知識是已傳輸的視頻數據量,猜測是在平均週期內壓縮剩餘視頻內容所需的數據量的預測估計。

更聰明的編碼器可以通過嘗試評估剩餘視頻內容將要壓縮的難度來改進此估計,使用已壓縮內容的統計數據並展望尚未壓縮的內容。通常,與僅查看先前數據量的非內容自適應算法相比,具有內容自適應算法的這些編碼器更有效。當低延遲和高質量都很重要時,可以使用內容自適應編碼器。

總結

對數據緩衝的需求增加了視頻系統延遲,並且雖然這種緩衝發生在解碼器(解壓縮)側,但影響緩衝量的因素是在編碼器(壓縮)的一側確定的,而編碼側需要考慮的就是要滿足傳輸要求和目標所需質量。

在設計滿足低延遲目標的系統時,要牢記以下幾點:

實現低延遲將需要在降低視頻質量與更高的傳輸比特率之間進行權衡。確定整個系統中的延遲貢獻者,並消除任何不必要的緩衝。關注系統中最重要的粒度級別(幀,級別,像素)。

選擇最佳編碼器是最重要的,更具體地說,評估每個編碼器的碼率控制功能,確保編碼器能夠提供對系統所需延遲的控制級別,至少要確保編碼器能夠支持您的目標比特率和所需的平均週期。

考慮這些關鍵編碼器功能可以幫助您快速創建選擇短列表。但是,與其他IP內核相比,有效選擇視頻編碼器需要仔細評估所產生的實際視頻質量,以及特定系統的延遲和比特率要求。

參考資料

[1] http://www.cast-inc.com/blog/white-paper-understanding-and-reducing-latency-in-video-compression-systems

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章