【吐槽向】為什么不推薦采用恒定質(zhì)量模式進(jìn)行直播推流

觀前提示:本文前半部分為干貨,后半部分可能有言辭較為激烈的內(nèi)容,請酌情觀看。發(fā)現(xiàn)不適請關(guān)閉瀏覽器。
? ? 本來是想仔仔細(xì)細(xì)好好詮釋一下直播推流的目標(biāo)和技術(shù)細(xì)節(jié)到底是什么。后來隨著群友的討論,以及陸續(xù)思考了一天,我實在覺得這東西根本沒有那么多值得分析的。完完全全就是被錯誤的思路帶歪了,分析那么多就是在浪費(fèi)寶貴的時間。所以把之前已經(jīng)寫的廢話截個圖放到下面,想看就看看不想看跳過,然后直接簡單粗暴把結(jié)論說出來。
防止峰值碼率爆炸,影響用戶體驗。

? ? 以下是之前寫的廢話,不想看可以跳過。



? ? 至于用什么編碼器,CPU占用不大比如不播游戲就直接x264(PC),占用偏大直接NVENC或者你的其他硬件編碼器。甚至硬解優(yōu)先度 >> CPU編碼。我認(rèn)為這也不用解釋,誰卡頓,誰心里清楚。
? ? 然后如果你非要用其他模式推流顯得自己與眾不同,想要不爆炸就把你用的編碼器最大碼率限制打開。比如nvenc就是max-bitrate,x264就是maxrate+bufsize。我這篇文章當(dāng)然不會教你怎么調(diào),而且我甚至?xí)嬖V你這種maxrate的峰值碼率限制方式對于直播這種場景復(fù)雜度快速變化很可能限不住,這里不用我解釋峰值碼率過大直接丟包卡畫面了吧?
? ? 而且,舉個已知例子就是采用vbr這種動態(tài)碼率分配的會在碼率快速增大的時候極易出色塊。不信自己試試。
? ? 所以,結(jié)論其實很簡單。既然全世界(對,不止中國大陸)所有直播平臺都推薦甚至強(qiáng)制采用CBR模式,哪怕CBR有的時候會「浪費(fèi)」CDN寶貴的帶寬,所以結(jié)論很簡單:
只要你是直播推流,就推CBR,最簡單粗暴效果反而會好。
對,OBS設(shè)置-輸出-輸出模式:簡單


? ? 順便一提,這一條明明白白的寫在Nvidia官方的推流指南上,建議類似堡壘之夜的游戲走1600 x 900 60 fps 播。網(wǎng)址我也給大家放在這里:
https://www.nvidia.cn/geforce/guides/broadcasting-guide/
? ? 這個網(wǎng)址其實還給出很多實用的建議,比如上行帶寬有限的情況下,至少留 25%?的帶寬用于其他應(yīng)用;比如大家更容易注意到幀率降低而不是分辨率,所以推流碼率超過 6 Mbps 就應(yīng)該開 60 幀。這篇文章甚至也說了我強(qiáng)調(diào)的問題,照顧手機(jī)用戶適當(dāng)降低帶寬。

? ? 所以其實建議到現(xiàn)在,相當(dāng)于沒說,因為就是大家一直在用并且相安無事的東西。平時抱怨最多的糊了或者不糊無非就是碼率給多給少的事。而開了過高的碼率導(dǎo)致卡頓,我作為觀眾也經(jīng)歷過很多次了。糾結(jié)這些設(shè)置最立竿見影的辦法就是把碼率調(diào)合適。
? ? 還有不懂的,給大家推薦幾篇我寫這篇文章的時候參考的分析:
? ? Using the right ‘Rate Control’ in OBS for streaming or recording
? ??https://blog.mobcrush.com/using-the-right-rate-control-in-obs-for-streaming-or-recording-4737e22895ed
? ? Understanding Rate Control Modes (x264, x265, vpx)
? ? https://slhck.info/video/2017/03/01/rate-control.html
? ? https://zhuanlan.zhihu.com/p/250585488(中文翻譯)
? ? NVEncC 選項列表
? ? https://github.com/rigaya/NVEnc/blob/master/NVEncC_Options.zh-cn.md
? ??Video buffering verifier - Wikipedia
? ??https://en.wikipedia.org/wiki/Video_buffering_verifier
? ? [x264-devel] Making sense out of x264 rate control methods
? ? https://mailman.videolan.org/pipermail/x264-devel/2010-February/006944.html
? ? How can I use CRF encoding with nvenc in ffmpeg?
? ??https://superuser.com/questions/1236275/how-can-i-use-crf-encoding-with-nvenc-in-ffmpeg
? ?
? ?最后,就是在前面寫x264參數(shù)分析這篇文章的時候說到的,這些編碼器,任何參數(shù)如果你不熟悉,最好的方式就是別去動他,保持默認(rèn)。出來的效果往往是比你瞎折騰還要好。


(正文部分結(jié)束,情緒輸出開始,不想看的抓緊關(guān)閉瀏覽器)? ?

?? ? 談點題外話吧。
? ? 有一個道理,我想不單單是圖形學(xué)或者計算機(jī)科學(xué),可能對于任何事情都是適用的。那就是一件被普遍推薦、執(zhí)行的措施,一定是有存在的道理的,絕不僅僅是所謂的慣性或者惰性。
? ? 不要天天被成功學(xué)洗腦感覺自己多么與眾不同想改變世界。能做到改變的人,至少會對事情有更清醒的認(rèn)識和更理性的分析。
? ? 我們就借著兩篇文章的原文說。

? ??

(1)碼率選擇模式再談
? ? 用目標(biāo)質(zhì)量模式當(dāng)然效果會比限制死碼率來得好。該省的地方碼率省下來,多的地方也不會欠碼。只要你不限制,100 Mbps 都能達(dá)到,誰都知道他好。問題在于,你的目的是推流啊。都不說手機(jī)端的觀眾了,哪怕推流端,就算國內(nèi)家寬提速了,上行有幾個過 100 Mbps 的?連G管入戶上行能給 100 Mbps 都算福利了。就算過 100 Mbps,穩(wěn)定嗎?跑推流跑得滿嗎?不然我們就做個調(diào)查,實際推流速度真不見得能達(dá)到號稱峰值的 30 Mbps。我在各種最吃上行的PT群聽到吐槽可是不少的。而且真正推流的決定因素可不止是你的連接性,叔叔的CDN還不一定穩(wěn)呢,我天天在錄播群看吐槽某某CDN動不動斷線。配合省帶寬的P2P加速,畫面已經(jīng)太美了。所以啊,考慮考慮你的觀眾,也考慮考慮你自己。
? ? 真的不要用傳統(tǒng)壓制的思路去看待實時編碼的推流。解釋在我最前面發(fā)的圖2里。場景是完全不一樣的?。。?/span>
(2)為什么不推薦X264直接編碼推流
? ? 用x264低碼率顯然效果比nvenc效果來得好。這也是nonsense。你咋不看看CPU占用有多高。不玩游戲還好,你開個大型游戲試試,歐卡2都能卡。

? ? 你別跟我說你的解釋就是《去雙機(jī)推流啊》、《你看哪個現(xiàn)在賣2000塊的CPU帶不動》。這就跟為啥游戲不直接照著3090最低配置做,然后就不用費(fèi)勁優(yōu)化了一樣。順便提醒一下,換U大概率意味著換平臺換主板,甚至還要加上換散熱、換電源。還是那句話,這不是常規(guī)方案和常規(guī)需求。
? ? 但最關(guān)鍵的就是,當(dāng)碼率提高的時候,硬件編碼器跟x264的肉眼的觀感差異沒有那么高。

? ??

(3)yuv模式選擇?
? 然后說回yuv的選擇問題(i.e. 420還是444)首先就用這篇文章一直舉的WoT的例子:紅字在420下發(fā)生模糊,證明應(yīng)該444而不是420。
? ? 本身超過1440p的分辨率,那個字會有多小我也不用多解釋。某多年的資深草船玩家直接告訴我,WoT那玩意兒本體優(yōu)化就爛。還舉了MC的例子,甚至我肉眼都看不太出來。為了這點優(yōu)化,犧牲大量體積和兼容性,至少我認(rèn)為沒什么價值。

? ? 那么這就完事了嗎?不,在我們糾結(jié)444和420的同時,這篇專欄里原本引用的雯壕的話其實都說了:

? ? 「目前大部分源成品就是420,重編碼444是完全沒有意義的。只會反而引入損失。」
? ? 除非你就是硬盤太大,喜歡極致畫質(zhì),才在純錄屏考慮yuv444。推流,沒有意義,得不償失。
? ? 這里的經(jīng)驗就是尊重現(xiàn)有規(guī)范和標(biāo)準(zhǔn)。
(4)推流更好的編碼、HDR
? ? 我倒是支持采用高級編碼,這是比上面所有優(yōu)化都立竿見影的提升中低碼率畫質(zhì)的方法。目前的AV1也好、還是HEVC都不錯,但還是老話,還是兼容性。這里真不是移動端。就HEVC來說,主流移動設(shè)備硬解一點問題都沒有。但PC因為瀏覽器的授權(quán)卡著,就是不行。哪怕現(xiàn)在有基于WebAssembly的軟解HEVC方案,也難以根本上解決這個問題。因此對新一代編碼的期待其實就是如何提高普及度和降低專利壁壘的影響。
? ? 但HDR顯示器的表現(xiàn)不用多解釋,按標(biāo)準(zhǔn)來說至少HDR500標(biāo)準(zhǔn)以上才有較為顯著的效果。那成本,呵呵。目前來看我對短期HDR內(nèi)容并不抱太高預(yù)期。普及度還不如HEVC呢。
(5)為什么這么多年沒有一個人把CRF應(yīng)用到直播領(lǐng)域呢?我是開拓者啊
(6)為什么bilibili自己的直播軟件不支持高級設(shè)置呢,多浪費(fèi)帶寬啊,建議開掉
? ? 我贊同,但希望先把給 iOS 端因為發(fā)熱就只給推 15?FPS 的那個神仙 PM 給開了。
(6.5)幀率

(7)WiFi 6 普及了!無線網(wǎng)不是問題了!

? ? emmm,反正我自己沒用 WiFi 6。而且穩(wěn)定性和用哪一代有什么關(guān)系。非要說低端 WiFi 6散熱不好更容易炸(沒錯就是菊花廠的那個)。非網(wǎng)絡(luò)專業(yè),請運(yùn)維來解釋一下吧?@IT狂魔 。
? ? 大概就是這樣了。
(8)何不食肉糜
? ? 文章排版其實也挺重要的。都是大字看著不太舒服。
(9)咱最后不要Cue那么多人了
? ? LP都沉迷把妹不理朝政了,某組實際扛把子其實是書記。
(10)原來你也玩?神

? ? 非要說?神在放技能的時候確實會有碼率峰值。不過親測開 8 Mbps 推流問題就不大了。錄屏 20 Mbps 夠用了。
? ? 說不定你也能看到我直播打?神。


致謝
? ? 出于隱私保護(hù)考慮,截圖均隱去昵稱頭像。
? ? 涉及渠道有私信、錄播群、粉絲群、壓制群、放流核心群等。
? ? 感謝提供視頻數(shù)據(jù)、測試環(huán)境、參數(shù)建議的各位小伙伴。
? ? 希望浪費(fèi)的一整天時間能讓大家少走點彎路。
? ? 再次聲明,真的不是為了懟誰或者怎樣,只是覺得有些觀點不太合理。闡釋一下我自己的看法。
? ? 本文僅代表筆者個人立場,不代表任何組織。
重要的事情再說一遍:請用CBR推流!
? ? 我專欄還有好康的。
? ??

