遺失隱藏(loss concealment)
當你在聽某人說話、有個音節變得含糊時,你的大腦往往會自動補上而你甚至沒察覺——你「聽見」了本該在那裡的東西。遺失隱藏就是接收端為即時媒體所做的這套把戲。當一個音訊或視訊封包不見了、又沒有時間再要一次時,播放器不會只播放靜音或凍結畫面;它會產生一個合理的替代品來填補空缺,理想上讓聽者或觀者根本察覺不到那個破洞。
它如何掩蓋空缺,取決於媒體本身。對語音而言,一個簡單的方法是重複前一個封包的波形,並讓它淡出,使短暫的中斷聽起來像一抹輕微的塗糊,而非一聲靜音的喀噠;更好的編解碼器則合成出語音聲的延續。對視訊而言,一個訊框中遺失的片段可以由前一個訊框複製相同區域來填補,因為一幅畫面在相鄰訊框間多半變化不大。一個互補的技巧是順向錯誤更正(FEC),發送端主動傳送一點冗餘資料,好讓接收端能從已抵達的部分重建遺失的封包——預先花費頻寬,以避免依賴一個來得太遲的重送。
為什麼重要:隱藏正是讓網路電話與視訊通話能在盡力而為網路那種正常、適度的封包遺失下存活、而不至於難以忍受的關鍵。它是播放緩衝區的搭檔:緩衝區把極端的遲到轉成遺失,隱藏再把那份遺失藏起來。但要誠實面對它的限制——隱藏是用猜的,它並未取回真正的資料。在低遺失下它幾乎無法察覺;當遺失攀升,那些猜測就變成聽得見的顫音或看得見的塗糊,而再多的隱藏也藏不住一條正在丟掉大部分封包的連線。
通話中,一個 20 毫秒的語音封包遺失了。解碼器不是讓人聽見一聲靜音的喀噠,而是把上一個完好封包的複本淡入那個空缺。在 1% 遺失時這聽不出來;在 15% 遺失時同樣的把戲卻會產生機械、水聲般的雜訊,那是聽者確實會察覺到的。
隱藏能很好地藏住偶發的遺失,但它是用猜的——嚴重的遺失會變得聽得出來。
隱藏與 FEC 是捏造或重建,它們從不真正重送。它們是 TCP 那種可靠性的刻意替代方案,之所以選用,是因為對即時媒體來說,一個遲到卻正確的封包,比一個快速、夠好的猜測更糟。