下圖是城市的夜景, 你能看清楚嗎?搞清楚馬賽克的技術原因可以幫助你消除直播中的馬賽克。
說起馬賽克, 無數的女生飄過眼前。
「馬賽克」被很多人稱為是一種罪惡的發明, 除了應用在上述場景中, 在直播過程中的也會出現馬賽克。
直播過程中出現的馬賽克卻有很多技術原因, 這篇文章將全方位為你解決直播中的「下馬」問題。
本文是 《直播疑難雜症排查》系列的第六篇文章, 我們重點來看看直播中常見的馬賽克問題。
一、馬賽克問題的表現馬賽克主要是指畫面中出現多處類似小方塊的圖像, 導致畫面的局部或者整體看不清楚的情況
二、馬賽克嚴重的問題排查
1.視頻編碼參數配置原因
視頻的畫質, 是由它的編碼品質決定的, 壓縮得越「厲害」, 畫質損失就越嚴重, 馬賽克就越多。
哪些關鍵因素決定了編碼器的壓縮品質呢 ?
編碼器最重要的五個參數:畫質級別、碼率、幀率、GOP 大小、碼控方式
畫質級別:H.264 有四種畫質級別, Baseline profile, Extended profile, Main profile, High profile。 級別越高, 壓縮的效果越好, 但演算法複雜度更高, 導致功耗也更高。
碼率:決定了視頻被壓縮的程度, 碼率越低, 丟失的資訊也就越多, 畫質也就越差。 但是, 帶來的好處是佔用的網路頻寬會比較小, 容易在互聯網上傳輸, 不容易出現卡頓。
幀率:決定了視頻的流暢性, 幀率越高, 視頻越流暢, 但每秒鐘編碼器要處理的資料量也就越大, 同等碼率下壓縮出來的視頻品質就越差。
GOP 大小:決定了視頻的延時, GOP 越小, 延時就越小, 但 GOP 小帶來的問題是關鍵幀數量多, 資料量變大, 因此, 同等碼率下壓縮出來的視頻品質就會越差。
碼控方式:一般編碼器都有固定碼率(CBR) 和 動態碼率(VBR) 兩種碼控方式, 前者是指碼率優先,
當然, 還有一個重要的因素, 就是編碼器本身的實現品質, 軟編一般可以保證在不同手機上效果一致, 而硬編則完全依賴手機所使用的硬體平臺了。
推薦的編碼器參數配置
一般直播場景中, 考慮到手機性能和功耗, 一般畫質級別採用的是 Baseline profile, GOP 通常設置為 1~3s, 幀率一般在 15~24 幀, 而碼率的配置, 則需要根據推流的解析度來決定, 推薦的解析度和碼率配置關係如下圖所示(來自:《Video Encoding Settings for H.264 Excellence》)。
總之,關於視頻編碼與馬賽克的關係,我們只需要記住一個原則:送入編碼器的資料量越大,編碼壓縮得越「厲害」,丟失的圖像資訊也就越多,資料解碼後的產生馬賽克也就越「厲害」
2.圖像尺寸原因
一般攝像頭採集的圖像解析度,跟最終推流的尺寸不一定完全匹配,當攝像頭採集的解析度大於推流尺寸的時候,需要先對畫面進行 「剪裁」處理,而當攝像頭採集的解析度大於推流尺寸的時候,則需要先對畫面進行「拉伸」處理,然後再送入編碼器中編碼壓縮。
例如:小尺寸的畫面(比如:640 x 480),拉伸到大的尺寸(比如:1280 x 720),則很容易會產生模糊和馬賽克,這樣的畫面再送入編碼器中編碼,無論怎樣配置都無法再改善已經產生的馬賽克了。
所以,為了降低馬賽克,我們必須要保證,攝像頭採集的解析度,一定要大於最終推流的解析度。
3.客觀條件原因
如果主播在光線非常暗的環境下,本身送入編碼器的圖像品質也不會特別好,因此,同等條件下馬賽克也會相對嚴重些。
同樣,如果拍攝的是劇烈晃動的畫面,劇烈變化的畫面信息量也要大很多,因此,編碼的複雜度會明顯增大,如果要保證碼率不會浮動太大,就必然要降低輸出的圖像品質,從而產生馬賽克現象。
如果直播應用是主打這種光線暗的場景或者劇烈運動的畫面場景的話,為了降低馬賽克,可以考慮適當將編碼參數配置得「高」 一點(比如:碼率高一點,幀率低一點等等),留出充分的 「富餘」空間,以抵抗環境因素帶來的影響。
4.關鍵幀丟失
還有一種馬賽克現象,是由於視頻流中丟失了關鍵幀,導致播放機解碼後花屏,從現象來看有點像馬賽克,但實際上跟上面討論的不是同一個問題,我們將在後續的文章中專門討論這個花屏問題。
七牛直播雲在 2016 年 6 月發佈之後,已説明客戶如熊貓TV、龍珠直播等解決過形形色色的問題,我們很樂意廣大技術人與公司能夠通過我們的經驗分享,避免不必要的開發。
總之,關於視頻編碼與馬賽克的關係,我們只需要記住一個原則:送入編碼器的資料量越大,編碼壓縮得越「厲害」,丟失的圖像資訊也就越多,資料解碼後的產生馬賽克也就越「厲害」
2.圖像尺寸原因
一般攝像頭採集的圖像解析度,跟最終推流的尺寸不一定完全匹配,當攝像頭採集的解析度大於推流尺寸的時候,需要先對畫面進行 「剪裁」處理,而當攝像頭採集的解析度大於推流尺寸的時候,則需要先對畫面進行「拉伸」處理,然後再送入編碼器中編碼壓縮。
例如:小尺寸的畫面(比如:640 x 480),拉伸到大的尺寸(比如:1280 x 720),則很容易會產生模糊和馬賽克,這樣的畫面再送入編碼器中編碼,無論怎樣配置都無法再改善已經產生的馬賽克了。
所以,為了降低馬賽克,我們必須要保證,攝像頭採集的解析度,一定要大於最終推流的解析度。
3.客觀條件原因
如果主播在光線非常暗的環境下,本身送入編碼器的圖像品質也不會特別好,因此,同等條件下馬賽克也會相對嚴重些。
同樣,如果拍攝的是劇烈晃動的畫面,劇烈變化的畫面信息量也要大很多,因此,編碼的複雜度會明顯增大,如果要保證碼率不會浮動太大,就必然要降低輸出的圖像品質,從而產生馬賽克現象。
如果直播應用是主打這種光線暗的場景或者劇烈運動的畫面場景的話,為了降低馬賽克,可以考慮適當將編碼參數配置得「高」 一點(比如:碼率高一點,幀率低一點等等),留出充分的 「富餘」空間,以抵抗環境因素帶來的影響。
4.關鍵幀丟失
還有一種馬賽克現象,是由於視頻流中丟失了關鍵幀,導致播放機解碼後花屏,從現象來看有點像馬賽克,但實際上跟上面討論的不是同一個問題,我們將在後續的文章中專門討論這個花屏問題。
七牛直播雲在 2016 年 6 月發佈之後,已説明客戶如熊貓TV、龍珠直播等解決過形形色色的問題,我們很樂意廣大技術人與公司能夠通過我們的經驗分享,避免不必要的開發。